wordpress and custom fields
10-28-2009, 04:34 PM
|
wordpress and custom fields
|
Posts: 38
Name: DB
|
Hi guys,
I am simply copying and pasting the script into the right place and it works a treat. It is to create extra custom field panels in the admin area of wordpress.
PHP Code:
<?php /** 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', __('Post options'), 'post_meta_boxes', 'post', 'normal', 'high' ); add_meta_box( 'page-meta-boxes', __('Post options'), 'page_meta_boxes', 'page', '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( 'title' => array( 'name' => 'Title', 'title' => __('Title', 'hybrid'), 'type' => 'text' ), 'description' => array( 'name' => 'Description', 'title' => __('Description', 'hybrid'), 'type' => 'textarea' ), 'image' => array( 'name' => 'Image', 'title' => __('Image:', 'hybrid'), 'type' => 'text' ), 'featured' => array( 'name' => 'Featured', 'title' => __('Featured img:', 'hybrid'), 'type' => 'text' ),
);
return apply_filters( 'hybrid_post_meta_boxes', $meta_boxes ); }
/** * Array of variables for page meta boxes. Make the * function filterable to add options through child themes. * * @since 0.3 * @return array $meta_boxes */ function hybrid_page_meta_boxes() {
/* Array of the meta box options. */ $meta_boxes = array( 'title' => array( 'name' => 'Title', 'title' => __('Title', 'hybrid'), 'type' => 'text' ), 'description' => array( 'name' => 'Description', 'title' => __('Description', 'hybrid'), 'type' => 'textarea' ),
);
return apply_filters( 'hybrid_page_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 Page panel. Loops * through each meta box in the $meta_boxes variable. * Gets array from hybrid_page_meta_boxes() * * @since 0.3 */ function page_meta_boxes() { global $post; $meta_boxes = hybrid_page_meta_boxes(); ?> <table class="form-table"> <?php foreach ( $meta_boxes as $meta ) :
$value = stripslashes( 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_page_meta_boxes() ); else $meta_boxes = array_merge( hybrid_post_meta_boxes() );
foreach ( $meta_boxes as $meta_box ) :
if ( !wp_verify_nonce( $_POST[$meta_box['name'] . '_noncename'], plugin_basename( __FILE__ ) ) ) return $post_id;
if ( 'page' == $_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; } ?>
However, when I change the name of the meta boxes they still appear in the admin area of wordpress but the data isn't saved as a custom field.
Here is what I type in...
PHP Code:
'header paragraph' => array( 'name' => 'Header Paragraph', 'title' => __('Header Paragraph', 'hybrid'), 'type' => 'text' ), 'location' => array( 'name' => 'Location', 'title' => __('Loation', 'hybrid'), 'type' => 'textarea' ),
I have tried everything. The script is from a tutorial on this site - WPShout
Thanks for any help.
DB
|
|
|
|
10-29-2009, 10:08 AM
|
Re: wordpress and custom fields
|
Posts: 280
Name: Randy
Location: Northern Wisconsin
|
I haven't looked through your code completely but I did notice you spelled Location wrong next to Hybrid. __('Loation', 'hybrid')
Just a simple suggestion, if you don't need everything this code does I have been using the code at http://wefunction.com/2009/10/revisi...-in-wordpress/. The code is more compact and easy to use.
Thanks for this technique though, I will look into it!
|
|
|
|
10-29-2009, 10:19 AM
|
Re: wordpress and custom fields
|
Posts: 46
|
Your post is way confusing so let me take a stab at it...
I believe the problem lies in this function
Code:
function hybrid_page_meta_boxes() {
/* Array of the meta box options. */
$meta_boxes = array(
'title' => array( 'name' => 'Title', 'title' => __('Title', 'hybrid'), 'type' => 'text' ),
'description' => array( 'name' => 'Description', 'title' => __('Description', 'hybrid'), 'type' => 'textarea' ),
);
return apply_filters( 'hybrid_page_meta_boxes', $meta_boxes );
}
you stated that you changed the code to look like this
Code:
'header paragraph' => array( 'name' => 'Header Paragraph', 'title' => __('Header Paragraph', 'hybrid'), 'type' => 'text' ),
'location' => array( 'name' => 'Location', 'title' => __('Loation', 'hybrid'), 'type' => 'textarea' ),
try this
Code:
$header_paragraph = array(
'header_paragraph' => array( 'name' => 'header_paragraph', 'title' => __('Header Paragraph', 'hybrid'), 'type' => 'text' ),
'location' => array( 'name' => 'Location', 'title' => __('Location', 'hybrid'), 'type' => 'textarea' )
);
return apply_filters( 'hybrid_page_meta_boxes', $header_paragraph );
give it a try... I change the syntax slightly.... let me know if it worked
***edit***
ah...
the first element of each array will create a form item with name="whatever"
In your original code you had a space in the key.....
the code I posted should work
*** end edit
Last edited by spyderwebtech; 10-29-2009 at 11:06 AM..
Reason: revelation!!
|
|
|
|
10-30-2009, 09:43 PM
|
Re: wordpress and custom fields
|
Posts: 38
Name: DB
|
Hey Racer, that is another tutorial I am also playing with.
Spyderwebtech, the guy who wrote the blog has got in touch so hopefully I can paste a solution.
|
|
|
|
|
« Reply to wordpress and custom fields
|
|
|
| Thread Tools |
Search this Thread |
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|
|
|