Custom Post Types
Custom post types are fully supported by my crossposting plugins. But in some cases, a little bit of configuration is required.
“Publish on” Section Doesn’t Appear for a Custom Post Type
In this part of the article, we will figure out why the “Publish on” section/meta box is visible for regular Posts or Pages but is not displayed for a custom post type.
If it is not visible for Posts and Pages as well, then maybe:
- You turned on “Auto mode” and forgot about it π
- There is an error in another plugin or a theme.
1. Check “Allowed Post Types” in plugin settings
In order to do so, please go to Network Admin > Settings > Network Crosspost if you’re using my Simple Multisite Crossposting:

Or just Settings > Crosspost if you’re using Simple WP Crossposting:

Please pay attention to the post type name β if it is registered as book or event, you shouldn’t use books or events. I know it is obvious, but it is a common mistake.
In case you decided to leave the “Allowed Post Types” option empty, then the crossposting is going to work for all post types available in your WordPress admin by default. It means that when this custom post type is registered, its the show_ui parameter should be set to true (or if not provided, the public parameter should be true).
2. Enable “Custom Fields” when registering a CPT
This may happen only for the Block Editor (Gutenberg), so if you’re using Classic Editor, feel free to skip this part.
Right now, we’re going to talk about this error message:

Good news β it is super-easy to fix. All you need to do is add custom-fields value to the supports parameter while registering a custom post type. Example:
register_post_type(
'book',
array(
...
'supports' => array( 'title', 'editor', 'custom-fields' )
)
);CPT UI example
Or if youβre using a third-party plugin for that, for example, CPT UI, then just make sure that you have an appropriate checkbox checked.

Pods example
It is done similarly in another custom post type plugin β Pods. Just edit a pod and then switch to the Advanced Options tab.

JetEngine example
When using the JetEngine plugin, you need to go to the Advanced Settings and find the following option there:

Post type is registered inside another plugin, and you don’t want to change its code
In this case, the filter hook register_post_type_args is here to help you. Example:
add_filter( 'register_post_type_args', function( $args, $post_type ) {
if( 'POST TYPE NAME' === $post_type ) {
// we just add 'custom-fields' to an existing array of supported stuff
$args[ 'supports' ][] = 'custom-fields';
}
return $args;
}, 10, 2 );Or you can use the add_post_type_support() function.
add_action( 'init', function() {
add_post_type_support( 'POST TYPE NAME', 'custom-fields' );
}, 999 );3. Deactivate broken plugins
Sometimes, a conflict can be created by another plugin. So if you tried everything mentioned in this article and nothing helped, please try to deactivate your website plugins one by one and see if it makes any difference.
The list of broken plugins already found by me is below:
- Kia Subtitle
Not so many yet, and that’s great π
Posts of a Custom Type Don’t Appear on the Other Sites
This part is only related to Simple WP Crossposting plugin, not Simple Multisite Crossposting, because the first one interacts with the other sites using the REST API, and we need to have a proper configuration of our CPT (Custom Post Type).
If you’re crossposting WooCommerce products, make sure that WooCommerce is installed and activated on both sites π
If the “Publish on” section is displayed but crossposting is still not working for your custom post type, it usually doesn’t happen silently, and you will get an error message like this:

It means that you need to check a couple of things on the “Misha Test” site (in our case).
- First of all, make sure that a custom post type is registered there with the same name.
- Make sure that it is added to the REST API,
show_in_restset totrue. - If you’re using the REST API base slug parameter, it should be the same on all sites.
In code, it may look like this:
register_post_type(
'book',
array(
...
'show_in_rest' => true,
'rest_base' => 'our-books', // if used, should be the same on all sites
...In the CPT UI plugin:

Or, once again, if you can not find where the custom post type is registered in the code (maybe it is handled by another plugin somehow), then you can easily use a snippet with the register_post_type_args hook. Example:
add_filter( 'register_post_type_args', function( $args, $post_type ) {
if( 'POST TYPE NAME' === $post_type ) {
$args[ 'show_in_rest' ] = true;
}
return $args;
}, 10, 2 );
// (Optional) In case you don't need the Block Editor for this post type
add_filter( 'use_block_editor_for_post_type', function( $is_block_editor, $post_type ) {
if( 'POST TYPE NAME' === $post_type ) {
$is_block_editor = false;
}
return $is_block_editor;
}, 10, 2 );