web-dev-qa-db-fra.com

Puis-je limiter cette méta-boîte à une page particulière?

J'utilise une version de ce script (http://www.deluxeblogtips.com/meta-box-script-for-wordpress/) mais je veux pouvoir limiter l'écran d'édition affiché par une méta-boîte.

Par exemple, si je veux seulement qu'une boîte méta soit affichée dans l'écran d'édition de la page "contact", est-ce possible?

$meta_boxes[] = array(
'id' => 'project-box-1',                            // meta box id, unique per meta box
'title' => 'Project Box 1',         // meta box title
'pages' => array('page'),   // post types, accept custom post types as well, default is array('post'); optional
'context' => 'normal',                      // where the meta box appear: normal (default), advanced, side; optional
'priority' => 'high',                       // order of meta box: high (default), low; optional
1
Dean Elliott

Dans votre fonction de rappel de hook add_meta_boxex, vous aurez un appel add_meta_box(). Emballez cet appel dans une condition, en utilisant les données du $post global (je suis assez certain il est disponible dans le edit.php). Par exemple, vous pouvez utiliser l'identifiant de page ou le slug.

ID de page:

global $post;
if ( '123' == $post->ID ) {
    // Page has ID of 123, add meta box
    add_meta_box( $args );
}

Page limace:

global $post;
$slug = basename( get_permalink( $post->ID ) );
if ( 'contact' == $slug ) {
    // Page has ID of 123, add meta box
    add_meta_box( $args );
}

Remarque: vous pouvez également cibler la page edit.php à l’aide de $pagenow global, par exemple:

global $pagenow, $page;
if ( 'edit.php' = $pagenow && '123' == $post->ID ) {
    add_meta_box( $args );
}

Cependant, il pourrait être plus efficace de simplement cibler le hook add_meta_boxes approprié pour votre rappel. Par exemple, votre appel add_action() ressemble probablement à ceci:

add_action( 'add_meta_boxes', 'callback_function_name' );

Mais vous pouvez utiliser le crochet add_meta_boxes_{post_type} pour cibler spécifiquement les pages:

add_action( 'add_meta_boxes_page', 'callback_function_name' );

De cette façon, le rappel n'est appelé que dans le contexte post-type de page.

3
Chip Bennett

Voir j'ai tendance à penser un peu différent que les développeurs. Je ferais un modèle personnalisé et l'associerais à ce modèle. De cette façon, il existe et si vous souhaitez l'ajouter à une autre page, utilisez le nouveau modèle personnalisé.

Je n'ai pas le code devant moi en ce moment.

1
Chris Kluis