¿Cómo agregar o eliminar metabox en cada página por separado?

4

Cómo agregar un meta box para una página en particular, por ejemplo: solo para la página Acerca de nosotros .

¿Cómo voy a hacer?

El código actual agrega los metaboxes para todas las 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'
    );
}
    
pregunta john cer 28.05.2012 - 10:43

2 respuestas

1

Aquí hay una función por la que puede pasar una única ID de publicación o una matriz de ID. Llame a esta función en su función que agrega las cajas meta. Si la identificación o las identificaciones no coinciden, los meta cuadros no se mostrarán en esa publicación o 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'
    );
}
    
respondido por el Chris_O 28.05.2012 - 15:08
1

Aquí hay otra posibilidad: mostrar u ocultar el Meta Box de acuerdo con la plantilla de la página o la categoría de publicación.

  • page-wpse-53486.php es el nombre de archivo de la plantilla.
  • form#adv-settings label[for='myplugin_sectionid-hide es la opción de meta box dentro de Opciones de pantalla . No queremos que aparezca si el meta box no está disponible para la publicación / página.
  • #in-category-6 es la casilla de verificación de la categoría con 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;
    }
}
    
respondido por el brasofilo 28.05.2012 - 23:58

Lea otras preguntas en las etiquetas