PLEASE NOTE: These forums are no longer utilized and are provided as an archive for informational purposes only. All support issues will be handled via email using our support ticket system. For more detailed information on this change, please see this blog post.

Custom Fields

  1. Anonymous
    Unregistered

    I have the following custom function code which i'm using to create custom fields for a custom post type.

    The issues is that I need the custom fields to show up individually and at the moment they just show up as 'key' which means that when i try to link a form field (Gravity Forms) to a custom field, I can only link to the 'key' field.

    Can anyone assist with how this can be modified to show each custom field individually so that Gravity Forms can pick up the individual Custom fields?

    /* Custom Fields */
    $key = "key";
    $meta_boxes = array(
    "cf_link" => array(
    "name" => "cf_link",
    "title" => "URL/Link",
    "description" => "Enter the URL/Link here."),
    "cf_image" => array(
    "name" => "cf_image",
    "title" => "Image",
    "description" => "Enter the image URL here."),
    "cf_instructions" => array(
    "name" => "cf_instructions",
    "title" => "Instructions",
    "type" => "textarea",
    "description" => "Enter any specific instructions here.")
    );
    
    function create_meta_box() {
    global $key;
    
    if( function_exists( 'add_meta_box' ) ) {
    add_meta_box( 'new-meta-boxes', ucfirst( $key ) . 'Product Details', 'display_meta_box', 'products', 'normal', 'high' );
    }
    }
    
    function display_meta_box() {
    global $post, $meta_boxes, $key;
    ?>
    
    <div class="form-wrap">
    
    <?php
    wp_nonce_field( plugin_basename( __FILE__ ), $key . '_wpnonce', false, true );
    
    foreach($meta_boxes as $meta_box) {
    $data = get_post_meta($post->ID, $key, true);
    ?>
    <div class="form-field form-required">
    <label for="<?php echo $meta_box[ 'name' ]; ?>"><?php echo $meta_box[ 'title' ]; ?></label>
    
    <?php if( $meta_box['type'] === 'textarea' ) { ?>
      <textarea name="<?php echo $meta_box[ 'name' ];?>" rows="4"><?php echo htmlspecialchars($data[$meta_box['name']]); ?></textarea>
    <?php } else { ?>
      <input type="text" name="<?php echo $meta_box['name']; ?>"
          value="<?php echo htmlspecialchars( $data[$meta_box['name']]); ?>" /><?php }?>
    <p><?php echo $meta_box[ 'description' ]; ?></p>
    </div>
    
    <?php } ?>
    
    </div>
    <?php
    }
    
    function save_meta_box( $post_id ) {
    global $post, $meta_boxes, $key;
    
    foreach( $meta_boxes as $meta_box ) {
    $data[ $meta_box[ 'name' ] ] = $_POST[ $meta_box[ 'name' ] ];
    }
    
    if ( !wp_verify_nonce( $_POST[ $key . '_wpnonce' ], plugin_basename(__FILE__) ) )
    return $post_id;
    
    if ( !current_user_can( 'edit_post', $post_id ))
    return $post_id;
    
    update_post_meta( $post_id, $key, $data );
    }
    
    add_action( 'admin_menu', 'create_meta_box' );
    add_action( 'save_post', 'save_meta_box' );
    Posted 13 years ago on Friday December 9, 2011 | Permalink
  2. Hi ideaboxx,

    What tutorial did you follow to get this started? That will help in determining who to best assist you from here. :)

    Posted 13 years ago on Wednesday December 14, 2011 | Permalink
  3. Anonymous
    Unregistered

    Hi David,

    The original tutorial is this one:
    http://wefunction.com/2009/10/revisited-creating-custom-write-panels-in-wordpress/

    I've actually managed to modify the code so that each custom field creates a new row in the database - as I understand it, although this will add extra load on the database, this will make the data/fields more easily searchable and usable (for creating custom field archives, filters, etc.)

    For anyone else having a similar issue here's the new, modified code, which GF can pick up:

    /* Custom Fields */
    $key = "key";
    $meta_boxes = array(
    "cf_link" => array(
    "name" => "cf_link",
    "title" => "URL/Link",
    "description" => "Enter the URL/Link here."),
    "cf_image" => array(
    "name" => "cf_image",
    "title" => "Image",
    "description" => "Enter the image URL here."),
    "cf_instructions" => array(
    "name" => "cf_instructions",
    "title" => "Instructions",
    "type" => "textarea",
    "description" => "Enter any specific instructions here.")
    );
    
    function create_meta_box() {
    global $key;
    
    if( function_exists( 'add_meta_box' ) ) {
    add_meta_box( 'new-meta-boxes', ucfirst( $key ) . 'Product Details', 'display_meta_box', 'products', 'normal', 'high' );
    }
    }
    
    function display_meta_box() {
        global $post, $meta_boxes, $key;
    ?>
        <div class="form-wrap">
    <?php
        wp_nonce_field( plugin_basename( __FILE__ ), $key . '_wpnonce', false, true );
    
        foreach($meta_boxes as $meta_box) {
            $data = get_post_meta($post->ID, $meta_box['name'], true);
    ?>
        <div class="form-field form-required">
        <label for="<?php echo $meta_box[ 'name' ]; ?>"><?php echo $meta_box[ 'title' ]; ?></label>
    <?php if( $meta_box['type'] === 'textarea' ) { ?>
      <textarea name="<?php echo $meta_box[ 'name' ];?>" rows="4"><?php echo htmlspecialchars($data); ?></textarea> 
    
    <?php } else { ?>
    
      <input type="text" name="<?php echo $meta_box['name']; ?>"
          value="<?php echo htmlspecialchars($data); ?>" /><?php }?>
    <p><?php echo $meta_box[ 'description' ]; ?></p>
    </div>
    <?php } ?>
    </div>
    
    <?php
    }
    
    function save_meta_box( $post_id ) {
    global $post, $meta_boxes, $key;
    
    foreach( $meta_boxes as $meta_box ) {
    $data[ $meta_box[ 'name' ] ] = $_POST[ $meta_box[ 'name' ] ];
    }
    
    if ( !wp_verify_nonce( $_POST[ $key . '_wpnonce' ], plugin_basename(__FILE__) ) )
    return $post_id;
    
    if ( !current_user_can( 'edit_post', $post_id ))
    return $post_id;
    
    foreach ($data as $d => $v) {
            update_post_meta( $post_id, $d, $v );
        }
    }
    
    add_action( 'admin_menu', 'create_meta_box' );
    add_action( 'save_post', 'save_meta_box' );
    Posted 13 years ago on Thursday December 15, 2011 | Permalink
  4. Great! Glad you were able to get this resolved. :)

    I'm going to close this topic now; but feel free to post a new topic if any other questions come up.

    Posted 13 years ago on Thursday December 15, 2011 | Permalink

This topic has been resolved and has been closed to new replies.