humanmade/Custom-Meta-Boxes

Cannot use both id and page-template in show_on array

Opened this issue · 1 comments

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.