Afficher des custom fields en fonction du modèle de page

Afficher des custom fields en fonction du modèle de page

Dans ce petit mémo sur wordpress, nous allons voir comment afficher des custom fields en fonction du modèle de page ou l’on se trouve. Voici comment coder notre début de fonction :

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

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

if($pageTemplate == 'commande.php' )
{
add_meta_box(
'commande_boxes', // $id
'Information de commande', // $title
'display_commande_boxes', // $callback
'page', // $page
'normal', // $context
'high'); // $priority
}
}
}

Ici je créée donc des metabox pour le modèle de page que j’ai appelé ‘Commande‘. Je nomme ma fonction « commande_box ». Je ne mets ici que le début de la fonction.

Un affichage sous condition

Sur mon site, j’ai déjà crée des metabox qui apparaissent sur toutes mes pages. Maintenant que j’ai mes metabox « commande » , je dois créer une condition pour faire apparaître l’une ou l’autre des metabox en fonction de la page à afficher.

Pour que ces metabox précédemment créées n’apparaissent pas dans mes pages commande, je retourne dans ma première fonction  que j’avais appelé « pico_box », et j’applique simplement une condition avec un simple ‘!=’ : je lui dis ainsi, affiche ces metabox sur toutes les pages, sauf pour toutes les pages créées sous le modèle de page ‘Commande‘ :

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

if(!empty($post))
{
$pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);
if($pageTemplate != 'commande.php' )
{
add_meta_box(
'pico_boxes', // $id
'Etablissement et année scolaire', // $title
'display_pico_box', // $callback
'page', // $page
'normal', // $context
'high'); // $priority
}
}
}
function display_pico_box($post) {
?>
<table >
<tr>
<th align=left><h2><?php _e('Etablissement'); ?></h2></th>
</tr>

<tr>
<td>
<?php $etablissement = get_post_meta($post->ID, 'etablissement',true); ?>
<input type="text" name="etablissement" id="Etablissement" value="<?php echo $etablissement ?>" class="requiredField" />
</td>
</tr>
<tr>
<th align=left> <h2><?php _e('Date'); ?></h2></th></tr>
<tr>
<td>
<?php $date = get_post_meta($post->ID, 'date',true); ?>
<input type="text" name="date" id="Date" value="<?php echo $date ?>" class="requiredField" />
</td>
</tr>
</table>
<?php
}

function save_pico_boxes($post_id) {
$etablissement = $_POST['etablissement'];
update_post_meta($post_id, 'etablissement', $etablissement );
$date = $_POST['date'];
update_post_meta($post_id, 'date', $date);

}
add_action('save_post', 'save_pico_boxes');

Lors de l’édition d’une page classique, je verrai alors les metabox de ma première fonction pico_box

1

Et si je passe sous le modèle de page ‘commande’ je ne verrai alors que les metabox créée avec la fonction ‘command_box‘:

2