Created
March 6, 2015 04:36
-
-
Save rilwis/423be7e4c38d14c09642 to your computer and use it in GitHub Desktop.
Group with better-include demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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