Custom-Meta-Boxes
Custom-Meta-Boxes copied to clipboard
Cannot use both id and page-template in show_on array
I have some meta boxes that need to only appear on the homepage and when a certain page template is selected.
I tried using the following setup:
$meta_boxes[] = array(
'title' => 'Feature Settings',
'pages' => array( 'page' ),
'show_on' => array(
'id' => array( get_option( 'page_on_front' ) ),
'page-template' => array(
'page-templates/feature.php',
),
),
'context' => 'normal',
'priority' => 'core',
'fields' => $this->fields(),
);
But the boxes do not appear on the front page. Any value passed to id
is ignored while page-template
exists in the same show_on
array.
I've got around this by having two $meta_boxes[]
arrays, one with using id
and the other using page_template
, which works fine.
@sambulance they are exclusionary because each filters the previous value so one or the other will always fail. This opens up a much larger can of worms but I'm glad you brought it up because this doesn't behave as I would expect it to if I were just walking into the project.
I might have a look at how CMB2 handles this - we might want some of the checks to accept the previous value if true and skip and other to override it like the permissions checks one; downside being that then we have disparate behavior and expectations between the checks.