web-dev-qa-db-fra.com

Ajouter une méta-boîte préexistante au nouveau type de publication personnalisé

J'ai un thème parent qui crée un certain nombre de boîtes de méta personnalisées qui sont ajoutées aux types de publication "post" et "pages", ainsi qu'un certain nombre de types de publication également créés par le thème.

Dans mon thème enfant, j'ai créé de nouveaux types de publication personnalisés. Je souhaite donc ajouter une fonction quelque part dans mon thème enfant pour ajouter ces méta-boîtes préexistantes aux nouveaux types de publication définis dans mon thème.

J'ai déjà essayé un certain nombre de choses, mais dans tous les cas, à moins d'éditer le fichier de boîte à méta dans mon thème parent, la boîte à méta ne parvient pas à être ajoutée à mon type d'article personnalisé.

J'aimerais apprendre comment faire cela. Est-ce que quelqu'un ici peut m'apprendre comment je ferais ça?

Merci

3
Zach Nicodemous

Cela dépend de la manière dont votre thème parent s’accroche dans les meta_boxes. Si les rappels sont rattachés à add_meta_boxes et écrits comme suit dans le 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' );

Ensuite, vous ne pourrez pas ajouter les boîtes sans pirater le fichier. Cette $screens = array( 'post', 'page' ); et le tableau qui suit l’empêcheront.

De même, vous ne pourrez pas ajouter:

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; l'empêchera.

Cependant, si elle est accrochée avec des crochets spécifiques au type de poste comme recommandé ...

add_action( 'add_meta_boxes_post', 'adding_custom_meta_boxes' );

... puis en ajouter d'autres devrait être facile:

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

Si vous pouvez trouver la fonction définie par le thème parent et s'accroche dans add_meta_boxes, vous pouvez supprimer l'action et la redéfinir dans votre thème enfant.

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' );
0
brianjohnhanna