Use remove_meta_box condicionalmente no tipo de postagem personalizado

Eu tenho um tipo de postagem personalizado com algumas checkboxs de taxonomia personalizadas, eu quero esconder isso quando em páginas filho. Descobri que remove_meta_box funciona bem, mas simplesmente não consigo acessar o object $ post dentro da ação.

Atualmente eu tenho

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' ); 

Eu tentei count($post->ancestors) > 0 e também apenas $post->post_parent mas nem trabalho.

Alguém tem alguma idéia de como acessar as variables ​​de $ post dentro dessa ação?

Solutions Collecting From Web of "Use remove_meta_box condicionalmente no tipo de postagem personalizado"

Você deve criar uma pequena function personalizada para verificar a postagem atual (página ou outro tipo de publicação) se o pai existe, como a function seguinte.

 /** * 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; }; 

Eu acho que basta verificar o tipo e o parâmetro post_parent , mas com o ID é limpo e sólido. Para os seus requisitos, você deve alternar a function condicional is_page() para ( 'people' === get_post_type() ) .

A function helper is_child você pode agora usar em seu teste antes de remover as meta-checkboxs, assim.

 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' ); } } 

Você pode tentar o gancho 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 ); 

Aqui buscamos o contexto normal , mas espero que você possa ajustá-lo às suas necessidades.