web-dev-qa-db-fra.com

Comment ajouter ou supprimer metabox chaque page séparément?

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'
    );
}
4
john cer

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;
    }
}
1
brasofilo

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'
    );
}
1
Chris_O