Como dijo @rarst, configurar global $wp_meta_boxes
en una matriz vacía puede ser una solución.
Con respecto al problema de sincronización , el mejor lugar para restablecer la variable es justo antes de que se use.
Metaboxes se imprimen a través de la función do_meta_boxes()
y dentro de ella no hay ganchos, sin embargo, contiene
get_user_option( "meta-box-order_$page" )
y get_user_option()
activa el filtro 'get_user_option_{$option}'
para que pueda usarlo para realizar su limpieza.
Algo como esto:
function remove_all_metaboxes($type) {
add_filter("get_user_option_meta-box-order_{$type}", function() use($type) {
global $wp_meta_boxes;
$wp_meta_boxes[$type] = array();
return array();
}, PHP_INT_MAX);
}
Sin embargo, el problema timing no es el único.
El otro problema es que si establece $wp_meta_boxes
en una matriz vacía , se eliminarán todos los metaboxes, incluso los principales, por ejemplo. la casilla que te permite guardar la publicación.
Por lo tanto, la solución no es establecerla en una matriz vacía, sino en la matriz que contiene los cuadros que desea conservar.
Por ejemplo, para conservar solo la casilla con el botón publicar, use:
function remove_all_metaboxes($type) {
add_filter("get_user_option_meta-box-order_{$type}", function() use($type) {
global $wp_meta_boxes;
$publishbox = $wp_meta_boxes[$type]['side']['core']['submitdiv'];
$wp_meta_boxes[$type] = array(
'side' => array('core' => array('submitdiv' => $publishbox))
);
return array();
}, PHP_INT_MAX);
}
add_action('admin_init', function() {
// replace with the slug of the post type you want to target
remove_all_metaboxes('post');
});