Created
March 22, 2013 03:38
-
-
Save spencejs/5218770 to your computer and use it in GitHub Desktop.
Add Wordpress Meta Boxes Without A Plugin
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
/** | |
Made with the help of a tutorial at WPShout.com => http://wpshout.com. | |
Courtesy of the Hybrid theme - themehybrid.com | |
* Adds the Hybrid Settings meta box on the Write Post/Page screeens | |
* | |
* @package Hybrid | |
* @subpackage Admin | |
*/ | |
/* Add a new meta box to the admin menu. */ | |
add_action( 'admin_menu', 'hybrid_create_meta_box' ); | |
/* Saves the meta box data. */ | |
add_action( 'save_post', 'hybrid_save_meta_data' ); | |
/** | |
* Function for adding meta boxes to the admin. | |
* Separate the post and page meta boxes. | |
* | |
* @since 0.3 | |
*/ | |
function hybrid_create_meta_box() { | |
global $theme_name; | |
add_meta_box( 'post-meta-boxes', __('Staff Member'), 'post_meta_boxes', 'staff', 'normal', 'high' ); | |
add_meta_box( 'form-meta-boxes', __('Staff Member'), 'form_meta_boxes', 'forms', 'normal', 'high' ); | |
} | |
/** | |
* Array of variables for post meta boxes. Make the | |
* function filterable to add options through child themes. | |
* | |
* @since 0.3 | |
* @return array $meta_boxes | |
*/ | |
function hybrid_post_meta_boxes() { | |
/* Array of the meta box options. */ | |
$meta_boxes = array( | |
'name' => array( 'name' => 'Name', 'title' => __('Name', 'hybrid'), 'type' => 'text' ), | |
'room' => array( 'name' => 'Room', 'title' => __('Room Number', 'hybrid'), 'type' => 'text' ), | |
'phone' => array( 'name' => 'Phone', 'title' => __('Phone Number', 'hybrid'), 'type' => 'text' ), | |
'email' => array( 'name' => 'Email', 'title' => __('Email', 'hybrid'), 'type' => 'text' ), | |
); | |
return apply_filters( 'hybrid_post_meta_boxes', $meta_boxes ); | |
} | |
/** | |
* Array of variables for form meta boxes. Make the | |
* function filterable to add options through child themes. | |
* | |
* @since 0.3 | |
* @return array $meta_boxes | |
*/ | |
function hybrid_form_meta_boxes() { | |
/* Array of the meta box options. */ | |
$meta_boxes = array( | |
'formname' => array( 'name' => 'Form_Name', 'title' => __('Form Name', 'hybrid'), 'type' => 'text' ), | |
'formurl' => array( 'name' => 'Form_URL', 'title' => __('Form URL', 'hybrid'), 'type' => 'text' ), | |
'phone' => array( 'name' => 'Phone', 'title' => __('Phone Number', 'hybrid'), 'type' => 'text' ), | |
); | |
return apply_filters( 'hybrid_form_meta_boxes', $meta_boxes ); | |
} | |
/** | |
* Displays meta boxes on the Write Post panel. Loops | |
* through each meta box in the $meta_boxes variable. | |
* Gets array from hybrid_post_meta_boxes(). | |
* | |
* @since 0.3 | |
*/ | |
function post_meta_boxes() { | |
global $post; | |
$meta_boxes = hybrid_post_meta_boxes(); ?> | |
<table class="form-table"> | |
<?php foreach ( $meta_boxes as $meta ) : | |
$value = get_post_meta( $post->ID, $meta['name'], true ); | |
if ( $meta['type'] == 'text' ) | |
get_meta_text_input( $meta, $value ); | |
elseif ( $meta['type'] == 'textarea' ) | |
get_meta_textarea( $meta, $value ); | |
elseif ( $meta['type'] == 'select' ) | |
get_meta_select( $meta, $value ); | |
endforeach; ?> | |
</table> | |
<?php | |
} | |
/** | |
* Displays meta boxes on the Write Post panel. Loops | |
* through each meta box in the $meta_boxes variable. | |
* Gets array from hybrid_post_meta_boxes(). | |
* | |
* @since 0.3 | |
*/ | |
function form_meta_boxes() { | |
global $post; | |
$meta_boxes = hybrid_form_meta_boxes(); ?> | |
<table class="form-table"> | |
<?php foreach ( $meta_boxes as $meta ) : | |
$value = get_post_meta( $post->ID, $meta['name'], true ); | |
if ( $meta['type'] == 'text' ) | |
get_meta_text_input( $meta, $value ); | |
elseif ( $meta['type'] == 'textarea' ) | |
get_meta_textarea( $meta, $value ); | |
elseif ( $meta['type'] == 'select' ) | |
get_meta_select( $meta, $value ); | |
endforeach; ?> | |
</table> | |
<?php | |
} | |
/** | |
* Outputs a text input box with arguments from the | |
* parameters. Used for both the post/page meta boxes. | |
* | |
* @since 0.3 | |
* @param array $args | |
* @param array string|bool $value | |
*/ | |
function get_meta_text_input( $args = array(), $value = false ) { | |
extract( $args ); ?> | |
<tr> | |
<th style="width:10%;"> | |
<label for="<?php echo $name; ?>"><?php echo $title; ?></label> | |
</th> | |
<td> | |
<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo wp_specialchars( $value, 1 ); ?>" size="30" tabindex="30" style="width: 97%;" /> | |
<input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" /> | |
</td> | |
</tr> | |
<?php | |
} | |
/** | |
* Outputs a select box with arguments from the | |
* parameters. Used for both the post/page meta boxes. | |
* | |
* @since 0.3 | |
* @param array $args | |
* @param array string|bool $value | |
*/ | |
function get_meta_select( $args = array(), $value = false ) { | |
extract( $args ); ?> | |
<tr> | |
<th style="width:10%;"> | |
<label for="<?php echo $name; ?>"><?php echo $title; ?></label> | |
</th> | |
<td> | |
<select name="<?php echo $name; ?>" id="<?php echo $name; ?>"> | |
<?php foreach ( $options as $option ) : ?> | |
<option <?php if ( htmlentities( $value, ENT_QUOTES ) == $option ) echo ' selected="selected"'; ?>> | |
<?php echo $option; ?> | |
</option> | |
<?php endforeach; ?> | |
</select> | |
<input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" /> | |
</td> | |
</tr> | |
<?php | |
} | |
/** | |
* Outputs a textarea with arguments from the | |
* parameters. Used for both the post/page meta boxes. | |
* | |
* @since 0.3 | |
* @param array $args | |
* @param array string|bool $value | |
*/ | |
function get_meta_textarea( $args = array(), $value = false ) { | |
extract( $args ); ?> | |
<tr> | |
<th style="width:10%;"> | |
<label for="<?php echo $name; ?>"><?php echo $title; ?></label> | |
</th> | |
<td> | |
<textarea name="<?php echo $name; ?>" id="<?php echo $name; ?>" cols="60" rows="4" tabindex="30" style="width: 97%;"><?php echo wp_specialchars( $value, 1 ); ?></textarea> | |
<input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" /> | |
</td> | |
</tr> | |
<?php | |
} | |
/** | |
* Loops through each meta box's set of variables. | |
* Saves them to the database as custom fields. | |
* | |
* @since 0.3 | |
* @param int $post_id | |
*/ | |
function hybrid_save_meta_data( $post_id ) { | |
global $post; | |
if ( 'page' == $_POST['post_type'] ) | |
$meta_boxes = array_merge( hybrid_form_meta_boxes() ); | |
else //JOSIAH-THE FOLLOWING IS IMPORTANT FOR ADDING STUFF! | |
$meta_boxes = array_merge( hybrid_post_meta_boxes() ); | |
$meta_boxes = array_merge( hybrid_form_meta_boxes() ); | |
foreach ( $meta_boxes as $meta_box ) : | |
if ( !wp_verify_nonce( $_POST[$meta_box['name'] . '_noncename'], plugin_basename( __FILE__ ) ) ) | |
return $post_id; | |
if ( 'forms' == $_POST['post_type'] && !current_user_can( 'edit_page', $post_id ) ) | |
return $post_id; | |
elseif ( 'post' == $_POST['post_type'] && !current_user_can( 'edit_post', $post_id ) ) | |
return $post_id; | |
$data = stripslashes( $_POST[$meta_box['name']] ); | |
if ( get_post_meta( $post_id, $meta_box['name'] ) == '' ) | |
add_post_meta( $post_id, $meta_box['name'], $data, true ); | |
elseif ( $data != get_post_meta( $post_id, $meta_box['name'], true ) ) | |
update_post_meta( $post_id, $meta_box['name'], $data ); | |
elseif ( $data == '' ) | |
delete_post_meta( $post_id, $meta_box['name'], get_post_meta( $post_id, $meta_box['name'], true ) ); | |
endforeach; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment