Afficher une meta box en fonction du modèle de page

Les fonctions classiques

On trouve de nombreux tutoriels sur la manière de limiter l’affichage d’une metabox en fonction du modèle de page.

Le plus souvent, on tombe sur cette fonction standard.


add_action('add_meta_boxes', 'add_product_meta');
function add_product_meta()
{
global $post;

if(!empty($post))
{
$pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);

if($pageTemplate == 'page-templates/product-page.php' )
{
add_meta_box(
'product_meta', // $id
'Product Information', // $title
'display_product_information', // $callback
'page', // $page
'normal', // $context
'high'); // $priority
}
}
}

function display_product_information()
{
// Add the HTML for the post meta
}

Celle-ci provient du site du développeur Paulund.

Voici une version simplifiée.

function add_product_meta($post){
global $post;
if ( 'product-page.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) {

add_meta_box(
'product_meta', // $id
'Product Information', // $title
'display_product_information', // $callback
'page', // $page
'normal', // $context
'high'); // $priority );
}
}
add_action( 'add_meta_boxes', 'add_product_meta' );

Or en fonction de la manière dont vous avez structuré votre code, cela peut ne pas fonctionner.

Une fonction pour afficher une ou des metabox sur un ou plusieurs modèles de pages

En voici une autre, au cas où la première version ne produirait aucun résultat sur votre site. Je n’affiche ici que la première fonction de la création d’une meta box

 function custom_editor_meta_box() {    
if( 'post.php' == basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']) && !isset($_GET['post_type']) ) {

// get post ID
$postid = $_GET['post'];

// check the template file name
if ('my-body-and-me-post.php' == get_page_template_slug($postid)) {
add_meta_box (
'custom-editor',
__('Custom Editor', 'custom-editor') ,
'custom_editor',
'post'
);
}
}
}

Si on veut afficher la metabox sur plusieurs modèles de pages spécifiques :

function custom_reference_meta_box() {  
if( 'post.php' == basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']) && !isset($_GET['post_type']) ) {

// get post ID
$postid = $_GET['post'];

if ('my-body-and-me-post.php' == get_page_template_slug($postid) || 'infographie.php' == get_page_template_slug($postid)) {
add_meta_box (
'custom-reference',
__('Custom Reference', 'custom-reference') ,
'custom_reference',
'post'
);
}
}
}

Il faudra ensuite sélectionner votre modèle de page directement depuis l’interface d’édition de votre page ou article pour voir apparaître les metabox.

Afficher une meta box en fonction du modèle de page