The is_page()
conditional relies on the global $wp_query
WP_Query object which isn’t set on the edit post page. We have some other options though…
If we know the page ID we can test against $_GET:
/**
* Remove metaboxes
*
* @return void
*/
function wpse343020_remove_meta_boxes() {
if( isset( $_GET, $_GET['post'] ) && 123 == $_GET['post'] ) {
remove_meta_box( 'pageparentdiv', 'page', 'side' );
}
}
add_action( 'admin_menu', 'wpse343020_remove_meta_boxes' );
If you really need to test against the page title or page slug you can hook in later whenever the global $post
WP_Post object is available:
/**
* Remove metaboxes
*
* @return void
*/
function wpse343020_remove_meta_boxes() {
global $post;
if( ! empty( $post ) && 'contact' == $post->post_name ) {
remove_meta_box( 'pageparentdiv', 'page', 'side' );
}
}
add_action( 'admin_head', 'wpse343020_remove_meta_boxes' );