所需页面上的元内容

时间:2012-06-21 作者:seoppc

我需要在程序页面上发布额外的信息,所以我决定使用wordpress metabox,但它会显示在所有页面上。所以,是否有任何条件检查,以便它可以在这些子页面上只放置元框,其中parent\\u page是“Programs”或parent page id。

我已经试过了。。。

function parent_id() {
    global $post;
    if ( is_page() && $post->post_parent ) {
        return $post->post_parent;
    } else {
        return false;
    }
}

if(parent_id() && parent_id() == 15) {
   //register meta box
}
但没用,请帮忙,谢谢。

5 个回复
SO网友:seoppc

经过多次尝试,我自己找到了以下解决方案,但这可以节省其他人的时间。

$pid = (isset($_GET[\'post\']) ? $_GET[\'post\'] : $_POST[\'post_ID\']); 
$page_att = get_page( $pid );
$page_parent = $page_att->post_parent;

if(15 == $page_parent){
//register metabox
}

SO网友:Adam

可能是这样的条件语句,

function custom_meta_box() {

    global $post;

    $parent_id = \'15\';

    if ($post->ID == $parent_id || $post->post_parent == $parent_id) {

        //do your meta-box stuff here

    } else {

        //do something else, or nothing

    }

}
通过将父页存储在变量中,对代码进行了轻微修改$parent_id (或根据您的喜好重命名)。这样,可以在条件语句之外设置页面ID,如果条件语句具有任何形式的复杂性,那么只需传递变量$parent_id 围绕

但需要注意的是,当您尝试Add New 页面,因为尚未将ID分配给该页面。当然,由于WordPress事先不知道您要创建什么类型的帖子,因此无法在您可能需要时隐藏元框。

解决这个问题的更好方法是创建一个自定义的帖子类型,然后您可以将元框单独分配给该帖子类型。如果您告诉它这样做,它将永远不会干扰其他帖子或页面。

SO网友:Gembel Intelek

not tested :D

function my_meta_box(){
    global $pagenow,$post;
    $thisParent = $post->post_parent;
    if ($thisParent !=\'0\'){
        $parentTitle = get_the_title($thisParent);
        if ( $pagenow == \'post.php\' && $parentTitle ==\'Programs\'){
        // register your meta_box
        }
    }
}
add_action( \'add_meta_boxes\', \'my_meta_box\' );
SO网友:Stephen Harris

查看source 您可以看到WordPress通过$post_type$post 操作的对象add_meta_boxes 作为参数。

所以

add_action(\'add_meta_boxes\', \'wpse56059_conditionally_add_metabox\', 10, 2);
function wpse56059_conditionally_add_metabox( $post_type, $post ){
    if(15 == $post->post_parent){
         add_meta_box( 
              \'wpse56059_metabox_id\',
              __( \'My Metabox\', \'wpse56059_textdomain\' ),
              \'wpse56059_metabox_callback\',
              \'page\' //post-type
          );
    }
}
或者,您可以使用add_meta_boxes_{post_type} 挂钩(例如。add_meta_boxes_page 对于页面),这将通过$post 对象作为参数。

SO网友:brasofilo

这是一个基于this answer 我的。

具有页面ID的数组必须根据您的需要进行调整。有一个console.log 被丢弃以便于检查。

在本例中,正在处理特征图像元框,#postimagediv. 这还必须适应您的自定义元框Div ID。

add_action(\'admin_head\', \'wpse_56059_script_enqueuer\');
function wpse_56059_script_enqueuer() 
{
    global $current_screen;
    if(\'page\' == $current_screen->id) 
    {
        echo <<<HTML
            <script type="text/javascript">
            jQuery(document).ready( function($) {
                // The page IDs to check for
                var arr = [ "21", "28" ];
                /**
                 * Adjust visibility of the meta box at startup
                */
                value = $(\'#parent_id\').val();
                if($.inArray(value,arr) > -1) {
                    // show the meta box
                    $(\'#postimagediv\').show();
                } else {
                    // hide your meta box
                    $(\'#postimagediv\').hide();
                }

                // Debug only
                // - outputs the ID of the selected page parent
                // - checking for console existance to avoid js errors in non-compliant browsers
                if (typeof console == "object") 
                    console.log (\'default value = \' + value);

                /**
                 * Live adjustment of the meta box visibility
                */
                $(\'#parent_id\').live(\'change\', function(){
                    value = $(this).val();
                    if($.inArray(value,arr) > -1) {
                        // show the meta box
                        $(\'#postimagediv\').show();
                    } else {
                        // hide your meta box
                        $(\'#postimagediv\').hide();
                    }

                    // Debug only
                    if (typeof console == "object") 
                        console.log (\'live change value = \' + value);
                });                 
            });    
            </script>
HTML;
    }
}

结束

相关推荐

Metabox nonce PHP notice

当我尝试在两种不同的分类法中添加新帖子时,我收到了一条通知,其中一种我使用自定义元框,另一种则不使用,但是当我尝试添加新项目时,这两种分类法都会出现通知,我看到:通知:未定义索引:product\\u noncename in/Applications/MAMP/htdocs/site/wordpress/wp-content/themes/theme/functions。第259行中的php隐藏在WP Admin中顶部黑色条带的略下方Line 259 is:if ( !wp_verify_nonce(