Eliminare Metabox Taxonomie Personalizată din Ecranul Tipului de Postare Personalizat
Am două taxonomii ierarhice personalizate, fiecare pe un tip de postare personalizat corespunzător. Aș dori să elimin metabox-ul pentru fiecare dintre ele din ecranul de editare al tipului de postare.
Am citit eliminare metabox taxonomie personalizată din tipul de postare personalizat și Cum elimini un metabox de taxonomie ierarhică de tip Categorie? dar tot sunt blocat.
Funcția pe care o folosesc este:
function remove_taxonomies_metaboxes() {
remove_meta_box( 'partner_typediv', 'partners', 'normal' );
remove_meta_box( 'person_typediv', 'people', 'normal' );
}
add_action( 'admin_menu' , 'remove_taxonomies_metaboxes' );
Am eliminat prefixele pentru post_types și custom_taxonomies, dar atât. Am încercat să folosesc hook-ul admin_menu
și hook-ul add_meta_boxes
recomandat de Codex. Am încercat atât normal
cât și side
pentru al treilea parametru.
Funcția de mai sus este localizată într-un fișier mu-plugins
sub funcția care înregistrează tipurile de postări și taxonomiile.
EDITARE: A fost o greșeală de scriere în funcția register_taxonomy. Sunt o persoană oribilă. Mulțumesc tuturor pentru ajutor. Tot am învățat câteva lucruri!
Dacă înregistrezi manual taxonomia personalizată prin intermediul funcției register_taxonomy, poți transmite argumente pentru a controla locul în care apare metabox-ul.
În exemplul de mai jos, setarea parametrului show_ui
la false
va elimina complet metabox-ul de la ecranul de editare, ecranul de editare rapidă și meniul de administrare. Dar dacă setezi show_ui
la true
, poți obține un control mai detaliat folosind argumentele show_in_quick_edit
și meta_box_cb
(setarea acestuia din urmă la false
ascunde metabox-ul pe ecranul de editare a CPT-ului, așa cum este dorit).
register_taxonomy( 'your_custom_taxonomy', array( 'your_custom_post_type' ), $args );
$args = array(
'show_ui' => true,
'show_in_quick_edit' => false,
'meta_box_cb' => false,
);

Funcționează. Păstrează meniul de administrare și elimină taxonomia personalizată în formularul de adăugare nou al tipului de postare personalizat. Mulțumesc.

Mulțumesc! Căutam 'meta_box_cb'=>false pentru a-l ascunde în post-new, unde setarea lui la null afișează doar versiunea implicită WordPress.

Spuneți că doriți să eliminați cutiile de pe ecranul de editare post
, nu de pe ecranul tipului de postare, deci presupunând că ar trebui să puteți înregistra taxonomia dumneavoastră doar pentru tipurile de postări cărora doriți să le fie aplicată și să evitați acest lucru cu totul. Exemplul din Codex înregistrează taxaonomia exemplu doar pentru tipul de postare book
astfel:
register_taxonomy( 'genre', array( 'book' ), $args );
Cred că aceasta este soluția de care aveți nevoie, dar nu ați postat niciun cod de înregistrare pentru tipurile de postări sau taxonomii.
Dacă ați creat cutiile meta personalizate - adică aceste cutii nu sunt cele implicite - atunci modalitatea de a evita această problemă este să înregistrați cutiile meta pe cârlige specifice tipului de postare:
do_action('add_meta_boxes_' . $post_type, $post);
Sau urmând exemplul de mai sus:
add_action('add_meta_boxes_book', 'your-box-callback');
Una dintre aceste abordări ar trebui să rezolve problema pentru dumneavoastră. Nu cred că ar trebui să fie nevoie să utilizați remove_meta_box
deloc.
Dacă încercați să eliminați cutiile meta de la tipul de postare la care sunt înregistrate, aceasta funcționează (din nou urmând exemplul din Codex):
function remove_taxonomies_metaboxes() {
remove_meta_box( 'genrediv', 'book', 'side' );
}
add_action( 'add_meta_boxes_book' , 'remove_taxonomies_metaboxes' );
Sunt destul de sigur că admin_menu
este prea devreme, dar nu am verificat acest lucru. add_metaboxes
funcționează și pentru mine. Nu știu de ce nu funcționează pentru dumneavoastră.

Scuze pentru neclaritate. Mă refeream la ecranul Post Type. Fiecare taxonomie este înregistrată doar pentru un singur tip de postare personalizată. Am încercat să folosesc acel hook add_meta_boxes_* pe scurt, dar voi încerca câteva variații ale acestuia (deși folosesc cutiile meta generate automat).

Atunci ultima opțiune din răspuns ar trebui să funcționeze. Am testat-o. Cutia chiar dispare. Nu pot spune că înțeleg logica de a avea taxonomiile fără cutii însă.

(Vezi editarea de mai sus. A fost o greșeală de tastare. E vina mea... Mulțumesc pentru ajutor). Pentru a răspunde la întrebarea ta, afișez taxonomiile cu un Advanced Custom Field (este o interfață mai bună pentru utilizatorii site-ului).

Ultimul tău exemplu m-a îndreptat în direcția corectă, dar iată ce a funcționat pentru mine: add_action( 'admin_menu', 'remove_taxonomies_metaboxes' );

Am constatat că această sintaxă nu funcționează cu versiunea actuală de WordPress, verifică acest răspuns pentru o soluție funcțională.

Taxonomiile înregistrează implicit un meta_box folosind un ID de tip tagsdiv-xxx. Folosind ACF pentru gestionarea taxonomiilor personalizate, casetele meta implicite devin inutile. Am încercat, cu succes, acest cod:
function remove_cuttax_metaboxes() {
$post_type = 'post';
$taxonomy = 'custom_taxonomy_slug';
remove_meta_box( 'tagsdiv-'.$taxonomy, $post_type, 'side' );
}
add_action( 'admin_menu' , 'remove_cuttax_metaboxes', 100 );
Prioritatea mai mică (100) permite acestui cod să funcționeze chiar dacă taxonomiile sunt create de un plugin precum CPT-UI.

tagsdiv ar trebui să aibă liniuță la sfârșit:
remove_meta_box( 'tagsdiv-'.$taxonomy, $post_type, 'side' );

Încearcă această soluție sau adaugă 'meta_box_cb' => false
în array-ul $args
al funcției register_taxonomy
add_action('init', function () {
register_taxonomy('your_taxonomy', 'your_post_type', [
'labels' => [
// opțiuni pentru etichete
],
// alte opțiuni
'show_ui' => true,
'show_in_quick_edit' => false,
'meta_box_cb' => false, // doar adaugă această linie
]);
});

Am încercat soluțiile de mai sus pentru a ascunde taxonomia, dar nu au funcționat pentru mine. În final, am găsit o soluție.
Adăugați acest cod în fișierul functions.php al temei dumneavoastră.
function Cc_Gutenberg_Register_files()
{
//fișier script personalizat
wp_register_script(
'cc-block-script',
get_stylesheet_directory_uri() .'/js/block-script.js',
array( 'wp-blocks', 'wp-edit-post' )
);
// înregistrează scriptul editorului de blocuri
register_block_type( 'cc/ma-block-files', array(
'editor_script' => 'cc-block-script'
) );
}
add_action('init', 'Cc_Gutenberg_Register_files');
Pentru block-script.js
, puteți folosi acest cod.
wp.data.dispatch( 'core/edit-post').removeEditorPanel( 'taxonomy-panel-category' ) ; // Ascunde Categoria implicită
wp.data.dispatch( 'core/edit-post').removeEditorPanel( 'taxonomy-panel-TAXONOMY-NAME' ) ; // Ascunde Taxonomia personalizată

remove_meta_box( $id, $screen, $context )
elimină într-adevăr cutiile meta din ecranul editorului "clasic"; nu funcționează pentru editorul pe blocuri Gutenberg.
Soluția ta este corectă pentru eliminarea cutiilor meta de taxonomie din editorul pe blocuri.
Acest lucru este menționat aici: https://developer.wordpress.org/reference/functions/remove_meta_box/#comment-5005
