wordpress and custom fields

Discussion in 'PHP' started by pathfinder_05, Oct 28, 2009.

  1. #1
    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 
    /** 
    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; 
    } 
    ?>
    
    PHP:
    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..

    
    'header paragraph' => array( 'name' => 'Header Paragraph', 'title' => __('Header Paragraph', 'hybrid'), 'type' => 'text' ), 
    'location' => array( 'name' => 'Location', 'title' => __('Loation', 'hybrid'), 'type' => 'textarea' ),  
    
    PHP:
    I have tried everything. The script is from a tutorial on this site - WPShout

    Thanks for any help.

    DB
     
    pathfinder_05, Oct 28, 2009 IP