Greyd.Suite enables you to synchronize posts across several websites with Global Content. However, you can customize specific meta fields — like a forms admin mail_to
field — locally for individual posts without disrupting global synchronization.
How it works
With a simple code snippet added to your child theme's functions.php
you can:
- enable local editing of any meta field in the admin interface.
- preserve local field values during global synchronization.
- control updates to linked posts based on specific meta field conditions.
That’s how it looks
Adapting for Any Meta Field
This approach is not limited to mail_to
or not even to the post type forms. You can customize any meta field for any post type by replacing mail_to
with your desired meta key and also adjusting the post type value. Adjust the snippet logic as needed for your use case.
Example Use Case
Synchronize a global post type while allowing localized values, such as region-specific email addresses or descriptions, ensuring consistency and flexibility.
/** * Enable editing of the "mail_to" field in the Forms post type. * This functionality ensures that the "mail_to" field can be customized locally, even for globally synchronized forms. * It also ensures that buttons like "publish" remain accessible for posts with global content links. */ function admin_forms_enable_metabox_field() { global $post_type; if ( 'tp_forms' === $post_type ) { echo '<style> textarea[name="mail_to"], body.gc_linked .editor-post-publish-button__button { cursor: initial !important; pointer-events: unset !important; opacity: 1 !important; } </style>'; } } add_action( 'admin_head', 'admin_forms_enable_metabox_field' ); /** * Prevent overwriting of the "mail_to" meta value when syncing forms via global content. * This ensures the locally defined "mail_to" value remains intact. * * @param mixed $meta_value The current meta value for "mail_to". * @param int $post_id The ID of the post being synced. * @param WP_Post $post The post object being synced. * * @return mixed The "mail_to" value from the local post. */ function filter_mail_to_field_before_import( $meta_value, $post_id, $post ) { return get_post_meta( $post_id, 'mail_to', true ); } add_filter( 'greyd_import_post_meta-mail_to', 'filter_mail_to_field_before_import', 10, 3 ); /** * Allow updates to linked posts only if the "mail_to" field is defined. * This provides granular control over synchronization behavior. * * @param bool $allow Whether the update should be allowed. * @param int $post_id The ID of the post being checked. * * @return bool Whether to allow the update of the linked post. */ function allow_update_of_linked_post_with_mail_to_field( $allow, $post_id ) { $meta = get_post_meta( $post_id, 'mail_to', true ); if ( ! empty( $meta ) ) { $allow = true; } return $allow; } add_filter( 'gc_allow_update_of_linked_post', 'allow_update_of_linked_post_with_mail_to_field', 10, 2 );