J'aimerais qu'une interface de champ personnalisée n'apparaisse que lorsqu'un certain modèle est attribué à une page WordPress particulière.
Des idées?
J'aimerais qu'une interface de champ personnalisée n'apparaisse que lorsqu'un certain modèle est attribué à une page WordPress particulière.
Des idées?
Réponses:
La meilleure façon d'aborder cette situation est via JavaScript. De cette façon, chaque fois que la valeur sélectionnée change, vous pouvez instantanément masquer / afficher la métabox associée.
Utilisez wp_enqueue_script()
in functions.php
pour charger un fichier JavaScript personnalisé dans la zone d'administration:
add_action('admin_enqueue_scripts', 'my_admin_script');
function my_admin_script()
{
wp_enqueue_script('my-admin', get_bloginfo('template_url').'/my-admin.js', array('jquery'));
}
Le script lui-même, qui nécessite jQuery, masque ou affiche simplement une métabox basée sur la valeur sélectionnée dans la liste déroulante du modèle de page. Dans cet exemple, je montre uniquement la métabox pour les miniatures de publication au cas où le modèle de page par défaut est sélectionné:
(function($){
$(document).ready(function() {
var $page_template = $('#page_template')
,$metabox = $('#postimagediv'); // For example
$page_template.change(function() {
if ($(this).val() == 'default') {
$metabox.show();
} else {
$metabox.hide();
}
}).change();
});
})(jQuery);
Et, juste pour le plaisir, voici une version plus courte et moins verbeuse du même script:
(function($){
$(function() {
$('#page_template').change(function() {
$('#postimagediv').toggle($(this).val() == 'default');
}).change();
});
})(jQuery);
Plutôt que de rendre la métabox uniquement pour la masquer avec jQuery, vous pouvez l'utiliser. La seule différence étant que le masquage / affichage de la métabox nécessite de sélectionner «Mettre à jour» après avoir modifié le champ déroulant.
function add_meta_box() {
global $post;
if(!empty($post)) {
$pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);
if($pageTemplate == 'your-page-template-here.php' ) {
add_meta_box( $id, $title, $callback, 'page', $context, $priority, $callback_args );
}
}
}
add_action( 'add_meta_boxes', 'add_meta_box' );
Mettez à jour les lignes 6 et 7 comme vous le souhaitez.