Exclude WordPress post types van add_meta_box()
De meeste van jullie zullen wel eens een eigen metabox toegevoegd hebben via add_meta_box().
Normaal gesproken ziet dat er ongeveer zo uit:
1 2 3 4 56 7 8 9 1011 12 function meta_box_picture() { add_meta_box( 'my-meta-box', // ID attribute of metabox 'My title', // Title of metabox visible to user 'my-meta_box_callback', // Function that prints box in wp-admin 'page', // Show box for posts, pages, custom, etc. 'up', // Where on the page to show the box, change to something other then normal, advanced or side 'high' // Priority of box in display order );} add_action( 'add_meta_boxes', 'meta_box_picture' );
Wij zullen ons richten op het 4e argument, in bovenstaand voorbeeld 'page' . Dit zorgt er voor dat onze metabox alleen voor het posttype 'page' zichtbaar zal zijn.
Wil je het voor meer posttypes weergeven dan kan je een array invullen. Bijvoorbeeld dit $screen= array( 'page', 'post', 'myposttype') in plaats van 'page'.
De meta box wordt nu weergegeven op de edit pagina's voor het post type page, post, en myposttype.
Exclude een post type
Dat is allemaal mooi, maar als op een dag je besluit een post type toe te voegen dan moet je terug je code induiken om het aan bovenstaande $screen array toe te voegen. Dat is niet zo handig...
Je kan je meta box voor alle huidige en toekomstige posttypes weergeven door het 4e argument van add_meta_box() leeg te laten, op deze manier: '' .
Maar wat nu als 1 of 2 types wil uitsluiten? Daar is geen standaard argument of functie voor. Maar dit is simpel te maken op deze manier:
1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 function meta_box_picture() { $excludeScreen= array('armag'); // The posttypes you want to exclude $CurrentScreen= get_current_screen(); // Get the current edit screen $screen= in_array( $CurrentScreen->id, $excludeScreen) ? 'exclude' : ''; // If the current screen id is in the exclude array set $screen to 'exclude' // Instead of exclude you can use any word as long it's not a posttype or empty // If the current screen id is not in the exclude array set $screen to '' add_meta_box( 'my-meta-box', // ID attribute of metabox 'My title', // Title of metabox visible to user 'my-meta_box_callback', // Function that prints box in wp-admin $screen, // Show box for posts, pages, custom, etc. 'up', // Where on the page to show the box, change to something other then normal, advanced or side 'high' // Priority of box in display order ); } add_action( 'add_meta_boxes', 'meta_box_picture' );
In $excludeScreen zet je 1 of meerdere post types die je wil uitsluiten. In $CurrentScreen komen de gegevens van de huidige pagina te staan. Ben je bijvoorbeeld een pagina aan het bewerken dan zal $CurrentScreen->id 'page' zijn.
Vervolgens gaan we kijken of dat in de $excludeScreen array voorkomt. Als dat zo is dan wordt $screen verandert in 'exlude', Dit mag overigens ieder ander woord zijn, zolang het maar niet de naam van een posttype is of leeg gelaten worden. Komt het namelijk niet in de $excludeScreen array voor dan zetten we $screen juist naar '' . Daardoor zal de meta box op de huidige pagina weergegeven worden, precies wat we wilde!
Ik hoop dat jullie hier iets aan gehad hebben. 🙂