特定のページにメタボックスを追加する方法は、次のようになります。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'
);
}
別の可能性があります:ページテンプレートまたは投稿カテゴリに従ってメタボックスを表示または非表示にします。
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;
}
}
これは、単一の投稿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'
);
}