Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jan 20th, 2011  |  syntax: PHP  |  size: 7.19 KB  |  views: 104  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /* Add a new meta box to the admin menu. */
  2.         add_action( 'admin_menu', 'hybrid_create_meta_box' );
  3.  
  4. /* Saves the meta box data. */
  5.         add_action( 'save_post', 'hybrid_save_meta_data' );
  6.  
  7. /**
  8.  * Function for adding meta boxes to the admin.
  9.  * Separate the post and page meta boxes.
  10.  *
  11.  * @since 0.3
  12.  */
  13. function hybrid_create_meta_box() {
  14.         global $theme_name;
  15.  
  16.         add_meta_box( 'post-meta-boxes', __('Additional Options'), 'post_meta_boxes', 'post', 'normal', 'high' );
  17.         add_meta_box( 'page-meta-boxes', __('Additional Options'), 'page_meta_boxes', 'page', 'normal', 'high' );
  18. }
  19.  
  20. /**
  21.  * Array of variables for post meta boxes.  Make the
  22.  * function filterable to add options through child themes.
  23.  *
  24.  * @since 0.3
  25.  * @return array $meta_boxes
  26.  */
  27. function hybrid_post_meta_boxes() {
  28.  
  29.         /* Array of the meta box options. */
  30.         $meta_boxes = array(        
  31.         'custom_field_1' => array( 'name' => 'custom_field_1', 'title' => __('Custom Field 1', 'hybrid'), 'desc' => 'Custom Field One Descritpion Here', 'type' => 'text' ),   
  32.        
  33.         'custom_field_2' => array( 'name' => 'custom_field_1', 'title' => __('Custom Field 2', 'hybrid'), 'desc' => 'Custom Field Two Descritpion Here', 'type' => 'text' )
  34.         );
  35.  
  36.         return apply_filters( 'hybrid_post_meta_boxes', $meta_boxes );
  37.  
  38. }
  39.  
  40. /**
  41.  * Array of variables for page meta boxes.  Make the
  42.  * function filterable to add options through child themes.
  43.  *
  44.  * @since 0.3
  45.  * @return array $meta_boxes
  46.  */
  47. function hybrid_page_meta_boxes() {
  48.  
  49.         // Array of the meta box options.
  50.         $meta_boxes = array(  
  51.        
  52.         'custom_field_1' => array( 'name' => 'custom_field_1', 'title' => __('Custom Field 1', 'hybrid'), 'desc' => 'Custom Field One Descritpion Here', 'type' => 'text' ),   
  53.        
  54.         'custom_field_2' => array( 'name' => 'custom_field_1', 'title' => __('Custom Field 2', 'hybrid'), 'desc' => 'Custom Field Two Descritpion Here', 'type' => 'text' )
  55.                        
  56.                
  57.         );
  58.  
  59.         return apply_filters( 'hybrid_page_meta_boxes', $meta_boxes );
  60. }
  61.  
  62. /**
  63.  * Displays meta boxes on the Write Post panel.  Loops
  64.  * through each meta box in the $meta_boxes variable.
  65.  * Gets array from hybrid_post_meta_boxes().
  66.  *
  67.  * @since 0.3
  68.  */
  69. function post_meta_boxes() {
  70.         global $post;
  71.         $meta_boxes = hybrid_post_meta_boxes(); ?>
  72.  
  73.         <table class="form-table">
  74.         <?php foreach ( $meta_boxes as $meta ) :
  75.  
  76.                 $value = get_post_meta( $post->ID, $meta['name'], true );
  77.  
  78.                 if ( $meta['type'] == 'text' )
  79.                         get_meta_text_input( $meta, $value );
  80.                 elseif ( $meta['type'] == 'textarea' )
  81.                         get_meta_textarea( $meta, $value );
  82.                 elseif ( $meta['type'] == 'select' )
  83.                         get_meta_select( $meta, $value );
  84.  
  85.         endforeach; ?>
  86.         </table>
  87. <?php
  88. }
  89.  
  90. /**
  91.  * Displays meta boxes on the Write Page panel.  Loops
  92.  * through each meta box in the $meta_boxes variable.
  93.  * Gets array from hybrid_page_meta_boxes()
  94.  *
  95.  * @since 0.3
  96.  */
  97. function page_meta_boxes() {
  98.         global $post;
  99.         $meta_boxes = hybrid_page_meta_boxes(); ?>
  100.  
  101.         <table class="form-table">
  102.         <?php foreach ( $meta_boxes as $meta ) :
  103.  
  104.                 $value = stripslashes( get_post_meta( $post->ID, $meta['name'], true ) );
  105.  
  106.                 if ( $meta['type'] == 'text' )
  107.                         get_meta_text_input( $meta, $value );
  108.                 elseif ( $meta['type'] == 'textarea' )
  109.                         get_meta_textarea( $meta, $value );
  110.                 elseif ( $meta['type'] == 'select' )
  111.                         get_meta_select( $meta, $value );
  112.  
  113.         endforeach; ?>
  114.         </table>
  115. <?php
  116. }
  117.  
  118. /**
  119.  * Outputs a text input box with arguments from the
  120.  * parameters.  Used for both the post/page meta boxes.
  121.  *
  122.  * @since 0.3
  123.  * @param array $args
  124.  * @param array string|bool $value
  125.  */
  126. function get_meta_text_input( $args = array(), $value = false ) {
  127.  
  128.         extract( $args ); ?>
  129.  
  130.         <tr>
  131.                 <th style="width:10%;">
  132.                         <label for="<?php echo $name; ?>"><?php echo $title; ?></label>
  133.                 </th>
  134.                 <td>
  135.                         <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%;" />
  136.                         <br/><small><?php echo $desc; ?></small>
  137.                         <input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
  138.                 </td>
  139.         </tr>
  140.         <?php
  141. }
  142.  
  143. /**
  144.  * Outputs a select box with arguments from the
  145.  * parameters.  Used for both the post/page meta boxes.
  146.  *
  147.  * @since 0.3
  148.  * @param array $args
  149.  * @param array string|bool $value
  150.  */
  151. function get_meta_select( $args = array(), $value = false ) {
  152.  
  153.         extract( $args ); ?>
  154.  
  155.         <tr>
  156.                 <th style="width:10%;">
  157.                         <label for="<?php echo $name; ?>"><?php echo $title; ?></label>
  158.                 </th>
  159.                 <td>
  160.                         <select name="<?php echo $name; ?>" id="<?php echo $name; ?>" style="background:none repeat scroll 0 0 #B8F7AD; color:#333333; font-size:20px; height:2em; padding:5px 10px;">
  161.                         <?php foreach ( $options as $option ) : ?>
  162.                                 <option <?php if ( htmlentities( $value, ENT_QUOTES ) == $option ) echo ' selected="selected"'; ?>>
  163.                                         <?php echo $option; ?>
  164.                                 </option>
  165.                         <?php endforeach; ?>
  166.                         </select>
  167.                         <br/><small><?php echo $desc; ?></small>
  168.                         <input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
  169.                 </td>
  170.         </tr>
  171.        
  172.         <?php
  173. }
  174.  
  175. /**
  176.  * Outputs a textarea with arguments from the
  177.  * parameters.  Used for both the post/page meta boxes.
  178.  *
  179.  * @since 0.3
  180.  * @param array $args
  181.  * @param array string|bool $value
  182.  */
  183. function get_meta_textarea( $args = array(), $value = false ) {
  184.  
  185.         extract( $args ); ?>
  186.  
  187.         <tr>
  188.                 <th style="width:10%;">
  189.                         <label for="<?php echo $name; ?>"><?php echo $title; ?></label>
  190.                 </th>
  191.                 <td>
  192.                         <textarea name="<?php echo $name; ?>" id="<?php echo $name; ?>" cols="60" rows="8" tabindex="30" style="width: 97%;"><?php echo wp_specialchars( $value, 1 ); ?></textarea>
  193.                         <small><?php echo $desc; ?></small>
  194.                         <input type="hidden" name="<?php echo $name; ?>_noncename" id="<?php echo $name; ?>_noncename" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
  195.                 </td>
  196.         </tr>
  197.         <?php
  198. }
  199.  
  200. /**
  201.  * Loops through each meta box's set of variables.
  202.  * Saves them to the database as custom fields.
  203.  *
  204.  * @since 0.3
  205.  * @param int $post_id
  206.  */
  207. function hybrid_save_meta_data( $post_id ) {
  208.         global $post;
  209.  
  210.         if ( 'page' == $_POST['post_type'] )
  211.                 $meta_boxes = array_merge( hybrid_page_meta_boxes() );
  212.         else
  213.                 $meta_boxes = array_merge( hybrid_post_meta_boxes() );
  214.  
  215.         foreach ( $meta_boxes as $meta_box ) :
  216.  
  217.                 if ( !wp_verify_nonce( $_POST[$meta_box['name'] . '_noncename'], plugin_basename( __FILE__ ) ) )
  218.                         return $post_id;
  219.  
  220.                 if ( 'page' == $_POST['post_type'] && !current_user_can( 'edit_page', $post_id ) )
  221.                         return $post_id;
  222.  
  223.                 elseif ( 'post' == $_POST['post_type'] && !current_user_can( 'edit_post', $post_id ) )
  224.                         return $post_id;
  225.  
  226.                 $data = stripslashes( $_POST[$meta_box['name']] );
  227.  
  228.                 if ( get_post_meta( $post_id, $meta_box['name'] ) == '' )
  229.                         add_post_meta( $post_id, $meta_box['name'], $data, true );
  230.  
  231.                 elseif ( $data != get_post_meta( $post_id, $meta_box['name'], true ) )
  232.                         update_post_meta( $post_id, $meta_box['name'], $data );
  233.  
  234.                 elseif ( $data == '' )
  235.                         delete_post_meta( $post_id, $meta_box['name'], get_post_meta( $post_id, $meta_box['name'], true ) );
  236.  
  237.         endforeach;
  238. }
clone this paste RAW Paste Data