Добавить существующий мета-ящик к новому настраиваемому типу сообщений

У меня есть родительская тема, которая создает ряд настраиваемых мета-полей, которые добавляются к типам сообщений «post» и «pages», а также к числу типов сообщений, также создаваемых темой.

В моей дочерней теме я создал несколько новых настраиваемых типов сообщений, поэтому хотел бы добавить функцию где-нибудь в моей дочерней теме, чтобы добавить эти ранее существующие мета-поля в новые типы сообщений, определенные в моей дочерней теме.

Я уже пробовал несколько вещей, но в каждом случае, не редактируя файл мета-окна в родительской теме, мета-окно не может быть добавлено к моему настраиваемому типу сообщений.

Я хотел бы узнать, как это сделать. Может кто-то здесь научит меня, как я это сделаю?

благодаря

Solutions Collecting From Web of "Добавить существующий мета-ящик к новому настраиваемому типу сообщений"

Это зависит от того, как ваша родительская тема зацепилась в meta_boxes. Если обратные вызовы подключены к add_meta_boxes и написаны в Codex следующим образом:

 function myplugin_add_meta_box() { $screens = array( 'post', 'page' ); foreach ( $screens as $screen ) { add_meta_box( 'myplugin_sectionid', __( 'My Post Section Title', 'myplugin_textdomain' ), 'myplugin_meta_box_callback', $screen ); } } add_action( 'add_meta_boxes', 'myplugin_add_meta_box' ); 

Тогда вы не сможете добавлять ящики без взлома файла. Это $screens = array( 'post', 'page' ); и последующий массив предотвратит это.

Аналогичным образом вы не сможете добавить:

 function adding_custom_meta_boxes( $post_type, $post ) { if ('abcd' == $post_type) return; add_meta_box( 'my-meta-box', __( 'My Meta Box' ), 'render_my_meta_box', 'post', 'normal', 'default' ); } add_action( 'add_meta_boxes', 'adding_custom_meta_boxes', 10, 2 ); 

if ('abcd' == $post_type) return; будет предотвращать это.

Однако, если он подключен к крючкам типа post type, как рекомендовано …

 add_action( 'add_meta_boxes_post', 'adding_custom_meta_boxes' ); 

… тогда добавить других должно быть легко:

 add_action( 'add_meta_boxes_mytype', 'adding_custom_meta_boxes' ); add_action( 'add_meta_boxes_myothertype', 'adding_custom_meta_boxes' ); 

Если вы можете найти функцию, которую родительская тема определяет и перехватывает в add_meta_boxes , вы можете удалить действие и переопределить его в своей дочерней теме.

 function my_child_theme_meta_box_override_cb() { $post_types = array( 'post', 'page', 'my_other_post_type' ); // copy the add_meta_box function from the parent theme hook below... } function wpse_override_meta_box_action(){ remove_action( 'add_meta_boxes', 'parent_theme_meta_box_hook_cb' ); add_action( 'add_meta_boxes', 'my_child_theme_meta_box_override_cb' ); } add_action( 'after_setup_theme', 'wpse_override_meta_box_action' );