Comment ajouter une boîte méta pour une page particulière, par exemple: pour seulement À propos de nous page.
Comment dois-je faire?
Le code actuel ajoute les métaboxes pour toutes les pages:
function myplugin_add_custom_box() {
add_meta_box(
'myplugin_sectionid',
__( 'My Post Section Title', 'myplugin_textdomain' ),
'myplugin_inner_custom_box',
'post'
);
add_meta_box(
'myplugin_sectionid',
__( 'My Post Section Title', 'myplugin_textdomain' ),
'myplugin_inner_custom_box',
'page'
);
}
Voici une autre possibilité: afficher ou masquer la Meta Box en fonction du modèle de page ou de la catégorie de publication.
page-wpse-53486.php
est le nom de fichier du modèle.form#adv-settings label[for='myplugin_sectionid-hide
est l'option de la boîte à méta dans Options de l'écran . Nous ne voulons pas qu'il apparaisse si la méta-boîte n'est pas disponible pour le post/la page.#in-category-6
est la case à cocher pour la catégorie avec l'ID 6.add_action('admin_head', 'wpse_53486_script_enqueuer');
function wpse_53486_script_enqueuer() {
global $current_screen;
if('page' == $current_screen->id)
{
echo <<<HTML
<script type="text/javascript">
jQuery(document).ready( function($) {
/**
* Adjust visibility of the meta box at startup
*/
if($('#page_template').val() == 'page-wpse-53486.php') {
// show the meta box
$('#myplugin_sectionid').show();
$("form#adv-settings label[for='myplugin_sectionid-hide']").show();
} else {
// hide your meta box
$('#myplugin_sectionid').hide();
$("form#adv-settings label[for='myplugin_sectionid-hide']").hide();
}
// Debug only
// - outputs the template filename
// - checking for console existance to avoid js errors in non-compliant browsers
if (typeof console == "object")
console.log ('default value = ' + $('#page_template').val());
/**
* Live adjustment of the meta box visibility
*/
$('#page_template').live('change', function(){
if($(this).val() == 'page-wpse-53486.php') {
// show the meta box
$('#myplugin_sectionid').show();
$("form#adv-settings label[for='myplugin_sectionid-hide']").show();
} else {
// hide your meta box
$('#myplugin_sectionid').hide();
$("form#adv-settings label[for='myplugin_sectionid-hide']").hide();
}
// Debug only
if (typeof console == "object")
console.log ('live change value = ' + $(this).val());
});
});
</script>
HTML;
}
elseif ( 'post' == $current_screen->id )
{
echo <<<HTML
<script type="text/javascript">
jQuery(document).ready( function($) {
if ( $('#in-category-6').is(':checked') ) {
$("form#adv-settings label[for='myplugin_sectionid-hide']").show();
$('#myplugin_sectionid').show();
} else {
$('#myplugin_sectionid').hide();
$("form#adv-settings label[for='myplugin_sectionid-hide']").hide();
}
$('#in-category-6').live('change', function(){
if ( $(this).is(':checked') ) {
$('#myplugin_sectionid').show();
$("form#adv-settings label[for='myplugin_sectionid-hide']").show();
} else {
$('#myplugin_sectionid').hide();
$("form#adv-settings label[for='myplugin_sectionid-hide']").hide();
}
});
});
</script>
HTML;
}
}
Voici une fonction que vous pouvez transmettre avec un seul identifiant de publication ou un tableau d'identifiants. Appelez cette fonction dans votre fonction qui ajoute les boîtes de méta. Si l'identifiant ou les identifiants ne correspondent pas, les boîtes de méta ne s'afficheront pas sur cet article ou cette page.
function check_id( $id ) {
// Get the current post ID
if ( isset( $_GET[ 'post' ] ) ) $post_id = $_GET[ 'post' ];
elseif ( isset( $_POST[ 'post_ID' ] ) ) $post_id = $_POST[ 'post_ID' ];
if ( ! isset( $post_id ) )
return false;
// If value isn't an array, turn it into one
$id = ! is_array ( $id ) ? array ( $id ) : $id;
// If current page id is in the included array, display the metabox
if ( in_array ( $post_id, $id ) )
return true;
else
return false;
}
function myplugin_add_custom_box() {
$what_page = check_id( array( 3, 18, 15 ) );
if ( false == $what_page ) return;
add_meta_box(
'myplugin_sectionid',
__( 'My Post Section Title', 'myplugin_textdomain' ),
'myplugin_inner_custom_box',
'post'
);
add_meta_box(
'myplugin_sectionid',
__( 'My Post Section Title', 'myplugin_textdomain' ),
'myplugin_inner_custom_box',
'page'
);
}