Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Group with better-include demo
<?php
global $meta_boxes;
$meta_boxes = array();
$meta_boxes[] = array(
'title' => 'Pedigree',
'only_on' => array(
'id' => array( 1 ), // Show only on "Hello World" post
),
'fields' => array(
array(
'id' => 'group',
'type' => 'group',
'name' => 'Group',
'clone' => true,
'fields' => array(
array(
'name' => 'Year',
'id' => 'year',
'type' => 'text',
'columns' => 2,
),
array(
'name' => 'Title',
'id' => 'title',
'type' => 'text',
'columns' => 10,
),
array(
'name' => 'Wins',
'id' => 'wins',
'type' => 'text',
'columns' => 4,
),
array(
'name' => 'Podiums',
'id' => 'podiums',
'type' => 'text',
'columns' => 4,
),
array(
'name' => 'Poles',
'id' => 'poles',
'type' => 'text',
'columns' => 4,
),
array(
'name' => 'Description',
'id' => 'description',
'type' => 'textarea',
'columns' => 12,
),
),
),
)
);
/**
* Register meta boxes
*
* @return void
*/
function prefix_register_meta_boxes()
{
global $meta_boxes;
// Make sure there's no errors when the plugin is deactivated or during upgrade
if ( class_exists( 'RW_Meta_Box' ) )
{
foreach ( $meta_boxes as $meta_box )
{
if ( isset( $meta_box['only_on'] ) && ! rw_maybe_include( $meta_box['only_on'] ) )
{
continue;
}
new RW_Meta_Box( $meta_box );
}
}
}
add_action( 'admin_init', 'prefix_register_meta_boxes' );
/**
* Check if meta boxes is included
*
* @return bool
*/
function rw_maybe_include( $conditions ) {
// Include in back-end only
if ( ! defined( 'WP_ADMIN' ) || ! WP_ADMIN ) {
return false;
}
// Always include for ajax
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
return true;
}
if ( isset( $_GET['post'] ) ) {
$post_id = intval( $_GET['post'] );
}
elseif ( isset( $_POST['post_ID'] ) ) {
$post_id = intval( $_POST['post_ID'] );
}
else {
$post_id = false;
}
$post_id = (int) $post_id;
$post = get_post( $post_id );
foreach ( $conditions as $cond => $v ) {
// Catch non-arrays too
if ( ! is_array( $v ) ) {
$v = array( $v );
}
switch ( $cond ) {
case 'id':
if ( in_array( $post_id, $v ) ) {
return true;
}
break;
case 'parent':
$post_parent = $post->post_parent;
if ( in_array( $post_parent, $v ) ) {
return true;
}
break;
case 'slug':
$post_slug = $post->post_name;
if ( in_array( $post_slug, $v ) ) {
return true;
}
break;
case 'category': //post must be saved or published first
$categories = get_the_category( $post->ID );
$catslugs = array();
foreach ( $categories as $category )
{
array_push( $catslugs, $category->slug );
}
if ( array_intersect( $catslugs, $v ) )
{
return true;
}
break;
case 'template':
$template = get_post_meta( $post_id, '_wp_page_template', true );
if ( in_array( $template, $v ) )
{
return true;
}
break;
}
}
// If no condition matched
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.