WP Options Importer

WordPress can presently export all of its content via WXR, and then import that through the WordPress Importer plugin. That process includes all posts, terms, menus, comments, and users, but it doesn’t touch options. In addition to general settings, options can include widget configurations, plugin settings, theme settings, and lots more. This can be very time-consuming to migrate manually. WP Options Importer aims to fill that void and save us all a lot of time.

WP Options Importer allows you to export all options to a JSON file, and then you can selectively import them into another WordPress installation. The import process is very transparent, and it even shows you what data you’ll be importing. Lastly, it gives you the option to override existing settings or to skip options that already exist.

To activate the WP Options Importer, include a call like this in your site’s theme: wpcom_vip_load_plugin( 'options-importer' );



Used alongside add_shortcode, Shortcake supplies a user-friendly interface for adding a shortcode to a post, and viewing and editing it from within the content editor.

Once you’ve installed the plugin, you’ll need to register UI for your shortcodes. For inspiration, check out examples of Shortcake in the wild.

To report bugs or feature requests, please use Github issues.


Shortcake can be installed like any other WordPress plugin.

Once you’ve done so, you’ll need to register the UI for your code.


1. Without Shortcake, shortcodes have a minimal UI.


2. But with Shortcake, TinyMCE will render the shortcode in a TinyMCE view.


3. And add a user-friendly UI to edit shortcode content and attributes.


4. Add new shortcodes to your post through “Add Media”.



Fieldmanager is a comprehensive toolkit for building forms, meta boxes, and custom admin screens for WordPress.

Field Types

  • Autocomplete
    Text fields that responds to user input with autocomplete suggestions (optionally via an ajax request).
  • Checkbox
    Single boolean checkbox.
  • Checkboxes
    A set of multiple checkboxes which stores as an array of the checked values.
  • Colorpicker
    Color picker interface.
  • Datepicker
    Text fields that uses the jQuery UI Datepicker to allow the user to select a date from a calendar. Optionally adds fields for time.
  • Grid
    Data grids (spreadsheets).
  • Hidden
    Hidden input fields.
  • Link
    Text fields that sanitize values as URLs.
  • Media
    Allow users to select an attachment via the Media popup.
  • Password
    Password text fields (hides user input).
  • Radios
    A set of radio buttons. Often accompanied by a datasource to populate the radio buttons.
  • RichTextArea
    Produces a visual editor (TinyMCE) field.
  • Select
    Select dropdowns.
  • TextArea
    Textarea (multi-line text) fields.
  • TextField
    Basic single-line text fields.


With Fieldmanager, you can add fields to different contexts.  For example, you might want to add a new option in the user profiles, which you can do through the User Context.

Available Contexts:

  • Post Context
    Adds a meta box to the new/edit post screen (for any post type), and saves data to post meta.
  • Term Context
    Adds fields to the new and/or edit term screen, and saves data to term meta.
  • Submenu Context
    Adds a new screen to the WordPress admin, and saves data to options.
  • User Context
    Adds fields to the edit user (profile) screen, and saves data to user meta.
  • Quickedit Context
    Adds fields to the Quickedit box in the post list screen, and saves data to post meta.

Grouping Fields

Fieldmanager lets you group one or more fields together to help with organizing content. You can have single-level groups, tabbed groups, and multi-level groups.

Image of a Single-Level Field Group
Single-Level Group of fields
Image of a Tabbed Field Group
Tabbed Field Group
Image of a Vertical Tabbed Field Group
Vertical Tabbed Field Group
Image of a Multi-Level Field Group
Multi-Level Field Group

Repeating and Sorting Fields

Fields or Groups of fields can repeat and be sorted.

  • The limit key is used to determine how many times a field can repeat. Use 0 if you want to allow unlimited fields
  • The sortable key is used to make a field sortable. This might be useful in a case where you are building a slider or other content that needs to be moved around.


$fm = new Fieldmanager_Group( array(
			'name'           => 'repeatable_meta_fields',
			'limit'          => 0,
			'add_more_label' => 'Add another set of fields',
			'sortable'       => true,
			'collapsible'    => true,
			'label'          => 'Fields',
			'children'       => array(
				'text'         => new Fieldmanager_Textfield( 'Text Field' ),
				'media'        => new Fieldmanager_Media( 'Media File' ),
		) );
$fm->add_meta_box( 'Field Group', 'demo-group' );

Repeatale, Sortable, and User-generated

You might want to have the option to create pages with different types of fields in different arrangements. The same post type might be configured for multiple images, a text field, and a button – or no images, a text field, and a form.

To accomplish these kinds of layout options, take a look at our Custom Blocks demo plugin:

Seen in action:

Fieldmanager Demos

To see more demos, check out the Fieldmanager Demos plugin from Alley Interactive:

Once you install and activate the plugin, you will see new post types that demonstrate different field types.

More Information

Official Site: http://fieldmanager.org/
API Docs: http://api.fieldmanager.org/index.html

WPCOM Legacy Redirector

The WPCOM Legacy Redirector is a plugin on WordPress.com VIP that allows you to set up redirects for legacy content on your WordPress.com site in a scalable manner.

Redirects are stored as a custom post type and use the following fields:

  • post_name: contains the md5 hash of the “from” path or URL
  • post_title: contains the “from” path or URL (without being hashed)
  • post_parent (if we’re redirecting to another post ID) OR post_excerpt (if we’re redirecting to another URI or absolute URL)

All interaction with this plugin is done via the command line, and all data about redirects needs to be bulk-loaded via wp-cli commands.

Redirect data can be stored in a CSV file OR in a post meta field. With the post meta field method, the resulting redirect is then attached to an existing post (and follows the post through future updates) whereas with the CSV method, the redirect is attached to a hardcoded URL.

This plugin will not redirect valid URLs. If the URL does not return a 404, the redirect will not trigger, which means it won’t redirect live pages.

If a slug should be a 404, but matches the start of another slug, WordPress will return that instead and the redirect will not trigger.

If you have questions about how this plugin will work on your site or if you’d like to have us review your redirect strategy, please contact us before using this plugin.

Activating the Plugin

WPCOM Legacy Redirector can be activated through your site Dashboard like other plugins, but it’s preferable to instead add the following to your theme’s functions.php file:

wpcom_vip_load_plugin( 'wpcom-legacy-redirector' );

Activating the plugin will make its wp-cli functions available on the command line but does not otherwise make any changes or create menu items or settings in the Dashboard.

Adding Redirects from Post Meta Fields

You can add redirects from post meta fields using this command:
wp wpcom-legacy-redirector import-from-meta --meta_key=my-post-meta-key

The plugin will search for all posts that have a post meta field named “my-post-meta-key” (or whatever key name you decide to use) and create a redirect from the address found in the meta field to the post that has that meta field. The meta field can contain relative or absolute URLs, but we recommend specifying absolute URLs where possible.

So, for example, if you wanted to redirect all requests to http://old-domain.com/old/legacy/path/ to post ID 5, you would set the value of the post meta field named “my-post-meta-key” to http://old-domain.com/old/legacy/path/ on the post with ID 5.

If you only want to process a certain number of posts at a time, you can add these optional command line parameters:

[--start=start-offset] [--end=end-offset]

where, for example, start-offset might be “1” and end-offset might be “1000”.

Adding Redirects from a CSV File

You can add redirects from a CSV file using this command:
wp wpcom-legacy-redirector import-from-csv --csv=/tmp/my_redirects.csv

The CSV file (in this example, /tmp/my_redirects.csv) should consist of the from url (without domain, and including preceding slash, and including any multisite subsite path), followed by the destination address:


The plugin will create a redirect from each source/legacy path to the destination address specified.

Destination Addresses

The destination address in the CSV import method can be one of: a Post ID, a relative path, or an absolute URL.

The destination value is passed to wp_safe_redirect internally, so be sure it’s a valid local address. If you want to redirect to other external domains, you can safelist that domain by filtering allowed_redirect_hosts in your theme:

add_filter( 'allowed_redirect_hosts', function( $hosts ) {
    $hosts[] = 'my-other-domain.com';
    $hosts[] = 'www.my-other-domain.com';

    return $hosts;

Testing and Production Runs

Before creating redirects on your production WordPress.com site, please test out the legacy redirect import process in your development environment to ensure the redirects are created as expected.

Once you’ve verified that the process works as expected, you can request a run of the redirector import command of your choosing by opening a new support ticket with WordPress.com VIP. Please make sure to include:

  • the URL of the site where you want to run the import
  • the CSV file containing your redirects (if using the CSV import method)
  • the name of the meta key containing your redirect destinations (if using the post meta import method)
  • Confirmation that you’ve run the import as a test in a development environment
  • An example URL on your site that is not currently redirected, and where it should redirect to when the import is complete (for testing)
  • Your desired timing for when the redirects are created

Once we receive your support request with all of the above information and have resolved any questions, we will proceed with running the import command.

Frequently Asked Questions

Q: Shouldn’t I just use the Safe Redirect Manager for redirects?
A: The Safe Redirect Manager allows you to create and update up to 300 redirects via your Dashboard. Above that number the redirect management becomes too slow for optimal performance, and so for redirect creation above that amount, you should use this plugin, which can handle as many redirects as needed.

Q: Can I create redirects for only a certain post type? 
A: At this time, the redirector plugin operates on all post types. But, in the case of adding redirects from post meta fields, it will only create redirects where it detects the existence of the specified meta key.

Q: Are there performance implications when running the import on a production site?
A: When we create a redirect for an existing URL, we clear the cache of any content that existed at that address. Importing thousands of redirects can temporarily decrease the performance of your site while that caching is cleared and then rebuilt. In general, creating redirects has a small performance impact on your site.

Q: Will the redirector automatically detect “from” URLs with and without trailing slashes?
A: No – you will need to add a redirect for each version of a “from” URL that you want to redirect, e.g. one with and one without a trailing slash.

Q: Can I use the plugin to dynamically create redirects (e.g. for a custom promotional URLs, link shortening, etc)?
A: Yes. The plugin has a basic API with two functions you can use: WPCOM_Legacy_Redirector::insert_legacy_redirect( $from_url, $redirect_to ) and WPCOM_Legacy_Redirector::get_redirect_post_id( $id ).


Maintenance Mode

To temporarily disable your site for maintenance we recommend using the Maintenance Mode plugin. Please note, this is plugin is meant to provide a temporary means of hiding your site. It is not intended to fully restrict access to site content.


To install and activate the plugin, you will have to follow these steps:

1. Commit the plugin to your repo. Add it to the Plugins directory, and ensure that the directory is named maintenance-mode.
2. Add the VIP_MAINTENANCE_MODE constant to vip-config/vip-config.php or in your theme and set to true.

 define( 'VIP_MAINTENANCE_MODE', true );

3. Load the plugin in client-mu-plugins/plugin-loader.php

wpcom_vip_load_plugin( 'maintenance-mode' );

Please remember to always test locally before committing your code or submitting your PR to us for review. Once this code has been committed, you can open a browser page which you are not logged-in to view the maintenance mode page.

IMPORTANT: if you’re not seeing maintenance mode enabled on the frontend of your site, check the (WordPress.com) logged-in vs. logged-out experience…they’re different, by design! In the backend, you won’t see much as this is a code-only plugin.

Custom Template

To add a custom template / messaging:

  • Add a template to your theme’s root folder called template-maintenance-mode.php.
  • This should be a simple HTML page that should include the message(s) you want to show your visitors.
  • Note: the template should include wp_head() and wp_footer() calls. You can find an example file here.

Additional Configurations

Using filters and conditionals, you can customize the behavior of the Maintenance Mode plugin based on your needs. Below are a few examples. Please note, these rely on the plugin being installed as described above.

Selectively Load Maintenance Mode
You can configure Maintenance Mode so that it will only display for a particular subsite. Note that this code would have to live in the vip-config/vip-config.php file:

$site_name = $_SERVER['SERVER_NAME'];
$lockdown = false;

if ( false !== strpos( $site_name, 'url-to-enable-maintentance-mode' ) ) {
    // Set lockdown
    $lockdown = true;
// Set maintenance plugin
define( 'VIP_MAINTENANCE_MODE', $lockdown );

Enable WordPress REST API
You can also configure Maintenance Mode to keep the WordPress REST API enabled even though the rest of the site is not accessible. Note that this code would usually live in a file within the client-mu-plugins folder:

// Generally allow API access
add_filter( 'vip_maintenance_mode_restrict_rest_api', '__return_false' );

You can also choose to enable the REST API only in more narrow use-cases:

add_filter( 'vip_maintenance_mode_restrict_rest_api', 'x_mm_allow_api' );

function x_mm_allow_api( $default ) {
	if (my_check() ) { 
                           return false;
	return true;

Custom Metadata Manager

An easy way to add custom fields to your object types (post, pages, custom post types, users).

The goal of this plugin is to help you rapidly build familiar, intuitive interfaces for your users in a very WordPress-native way.

The custom field panel is nice, but not quite the easiest thing for users to work with. Adding your own metaboxes and fields involves a lot of time and repetitive code that could be better used elsewhere.

This plugin handles all that heavy-lifting for you behind-the-scenes, so that you can focus on more on building out and connecting your data rather than all the minor details. To add a custom field, simply register it like so:

add_action( 'custom_metadata_manager_init_metadata', function() {
    x_add_metadata_field( 'my-field-name', 'post' );
} );

The above generates a metabox with a text field inside it, with the necessary hooks to save the entered values.

The API is similar to that used for registering custom post types and taxonomies so it should be familiar territory.

WP Large Options

The Options API is meant to store kind of arbitrary information like settings but not large amounts of data. The WP Large Options plugin will help you to store those large option values in a custom post type and in a cache-safe manner to improve your website’s performance.

Why should we avoid storing large amounts of data in options?

When the wp_options table is too large ( > 1MB), the requests for fetching options will directly be sent to the database servers without any caching layer. Depending on the traffic of the site, this will most likely cause a flood of requests and have a severe impact on the database performance. Want to know more about the wp_options? Follow our “Working with wp_options” guide.

How to use the WP Large options plugin?

The WP Large Options API is very similar to the WordPress Options API:

Safe Redirect Manager

What does this plugin do?

Safe Redirect Manager is an HTTP redirect manager for WordPress. An easy-to-use UI allows you to redirect locations to new URLs with the HTTP status codes of your choosing. The plugin uses the wp_safe_redirect function, which only allows redirects to allowed hosts, for security purposes. The plugin automatically handles the creation of allowed hosts for you.

(Note that this plugin will not allow you to redirect visits to your site’s home/front page. To achieve this, you’ll need to modify your theme code to hook into an early action and with a conditional is_front_page(), call wp_safe_redirect().)

How do I set it up?

Once you’ve activated the plugin, you’ll see a new option, Tools→Safe Redirect Manager in the sidebar menu of your Dashboard. Click the “Create Redirect Rule” button at the top:

Add New Rule

There, you’ll see a form to add and publish the redirect.

Redirect Example

After publishing, there may be a delay of several minutes before the changes take effect. If a redirect isn’t working as expected after 10 minutes, just let us know.

For more information, please see the full plugin documentation here.

Ready to get started?

Drop us a note.

No matter where you are in the planning process, we’re happy to help, and we’re actual humans here on the other side of the form. 👋 We’re here to discuss your challenges and plans, evaluate your existing resources or a potential partner, or even make some initial recommendations. And, of course, we’re here to help any time you’re in the market for some robust WordPress awesomeness.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.