web-dev-qa-db-ja.com

各ページを個別にメタボックスを追加または削除する方法

特定のページにメタボックスを追加する方法は、次のようになります。for onlyAbout Usページ。

どうすればいいの?

現在のコードはすべてのページのメタボックスを追加します。

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

別の可能性があります:ページテンプレートまたは投稿カテゴリに従ってメタボックスを表示または非表示にします。

  • page-wpse-53486.phpはテンプレートのファイル名です。
  • form#adv-settings label[for='myplugin_sectionid-hide画面オプションの中のメタボックスオプションです。メタボックスが投稿/ページで利用できない場合は表示したくありません。
  • #in-category-6は、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

これは、単一の投稿IDまたはIDの配列を渡すことができる関数です。メタボックスを追加する関数でこの関数を呼び出します。 IDまたはIDが一致しない場合、メタボックスはその投稿またはページに表示されません。

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