在自定义帖子类型上有条件地使用REMOVE_META_BOX

时间:2016-09-05 作者:benpalmer

我有一个带有一些自定义分类框的自定义帖子类型的人,我想在子页面上隐藏这些。我发现remove\\u meta\\u box工作正常,但我无法访问操作中的$post对象。

目前我有

function remove_post_custom_fields($post) {
  global $post;
  if( count($post->ancestors) > 0 ){
    remove_meta_box( \'staff-typediv\' , \'people\' , \'normal\' );
    remove_meta_box( \'practice-areadiv\' , \'people\' , \'normal\' ); 
  }
}
add_action( \'admin_menu\' , \'remove_post_custom_fields\' );
我试过了count($post->ancestors) > 0 而且还只是$post->post_parent 但两者都不起作用。

有人知道如何在此操作中访问$post变量吗?

2 个回复
SO网友:bueltge

如果存在父级,则应创建一个小型自定义函数来检查当前帖子(页面或其他帖子类型),如follow函数。

/**
 * if the post is a subpage for ID.
 *
 * $post object The post.
 * 
 * return boolean
 */
function is_child( $post ) {

    // If is sub_post
    if ( is_page() && ( $post->post_parent === $post->ID ) ) 
               return TRUE;
    else 
               return FALSE;
};
我认为检查类型和post_parent param,但ID是干净和坚实的。根据您的要求,您是否应切换is_page() 条件函数到( \'people\' === get_post_type() ).

助手函数is_child 在移除元框之前,您现在可以在测试中使用吗。

add_action( \'admin_menu\' , \'remove_post_custom_fields\' );
function remove_post_custom_fields( $post ) {

  if ( is_child( $post ) ){
    remove_meta_box( \'staff-typediv\' , \'people\' , \'normal\' );
    remove_meta_box( \'practice-areadiv\' , \'people\' , \'normal\' ); 
  }
}

SO网友:birgire

您可以尝试do_meta_boxes 挂钩:

add_action( \'do_meta_boxes\', function( $post_type, $context, $post )
{
    // Nothing to do if context isn\'t \'normal\'
    if( \'normal\' !== $context )
        return;

    // Nothing to do if post type isn\'t \'people\'
    if( \'people\' !== $post_type )
        return;

    // Nothing to do with no post parents
    if( $post instanceof \\WP_Post && 0 == $post->post_parent )
        return;

    // Remove meta boxes
    foreach( [ \'staff-typediv\', \'practice-areadiv\' ] as $id )   
        remove_meta_box( $id, $post_type, $context );

}, 10, 3 );
这里我们针对的是正常的环境,但希望您可以根据自己的需要进行调整。

相关推荐

WP_COMMENTS表真的很大,正在慢慢加载/wp-admin/dit-Comments.php

我们的wp\\u注释有数百万行。当我们加载时/wp/wp-admin/edit-comments.php 它将超时。看看mysql,这个简单的查询需要很长时间SELECT wp_comments.comment_ID FROM wp_comments WHERE ( ( comment_approved = \'0\' OR comment_approved = \'1\' ) ) AND comment_type IN (\'pingback\', \'trackback\')&