Como adicionar ou remover o metabox de cada página separadamente?

4

Como adicionar uma meta box para uma página específica, por exemplo: para apenas a página Sobre nós .

Como devo proceder?

O código atual adiciona os metaboxes para todas as páginas:

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'
    );
}
    
por john cer 28.05.2012 / 10:43

2 respostas

1

Aqui está uma função que você pode passar por um único ID de postagem ou uma matriz de IDs. Chame essa função em sua função que adiciona as caixas meta. Se o id ou os ids não corresponderem às caixas meta, não serão exibidos nesse post ou na página.

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'
    );
}
    
por Chris_O 28.05.2012 / 15:08
1

Aqui está outra possibilidade: mostrar ou ocultar a Meta Box de acordo com o modelo da página ou com a categoria da postagem.

  • page-wpse-53486.php é o nome do arquivo do modelo.
  • form#adv-settings label[for='myplugin_sectionid-hide é a opção da caixa meta dentro das Opções da tela . Não queremos que apareça se a meta box não estiver disponível para o post / página.
  • #in-category-6 é a caixa de seleção da categoria com o 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;
    }
}
    
por brasofilo 28.05.2012 / 23:58

Tags