Wordpress只保存最后一个自定义字段

时间:2015-09-23 09:55:35

标签: php wordpress plugins

我想有三个下拉列表,允许用户选择作者,帖子和见证。但是wordpress只保存最后一次下拉菜单。

这是第一次下拉:

//allow authors list on posts
add_action( 'add_meta_boxes', 'author_list_add' );
function author_list_add() {
 add_meta_box( 'my-meta-box-id', 'Post Author', 'author_list', 'post', 'normal', 'high' );
}

function author_list( $post ) {
 $values = get_post_custom( $post->ID );
 $selected = isset( $values['custom_author'] ) ? esc_attr( $values['custom_author'][0] ) : '';
 wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce ');
?>

   <p>
    <label for="custom_author">Select author</label>
    <br>
    <select name="custom_author" id="custom_author">
     <option value="0" <?php selected( $selected, '0' ); ?>>No author</option>
    <?php 
     $args = array('post_type' => 'member');
              $loop = get_posts($args);


               foreach ($loop as $post) : setup_postdata($post);
               $name = $post->post_title;
                $link = $post->ID;
               ?>
      <option value="<?php echo $link; ?>" <?php selected( $selected, $link ); ?>><?php echo $name; ?></option>
     <?php
              endforeach;
    ?>
    </select>
   </p>
<?php
}

add_action( 'save_post', 'author_list_save' );
function author_list_save( $post_id ) {
 // Bail if we're doing an auto save
 if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
 // if our nonce isn't there, or we can't verify it, bail
 if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
 // if our current user can't edit this post, bail
 if( !current_user_can( 'edit_post' ) ) return;
 // now we can actually save the data
 $allowed = array(
            'a' => array( // on allow a tags
            'href' => array() // and those anchords can only have href attribute
    )
 );

// Probably a good idea to make sure your data is set
 if( isset( $_POST['custom_author'] ) )
  update_post_meta( $post_id, 'custom_author', esc_attr( $_POST['custom_author'] ) );
}

第二部分:

//allow select testimonial list on posts
add_action( 'add_meta_boxes', 'testimonial_select_box_add' );
$types = array( 'post', 'page' );
function testimonial_select_box_add() {
 add_meta_box( 'testimonial-box', 'Testimonial in bottom row', 'testimonial_select_box', $types, 'normal', 'high' );
}

function testimonial_select_box( $post ) {
 $values = get_post_custom( $post->ID );
 $selected = isset( $values['testimonial_select'] ) ? esc_attr( $values['testimonial_select'][0] ) : '';
 wp_nonce_field( 'testimonial_meta_box_nonce', 'meta_box_nonce' );
?>

   <p>
    <label for="testimonial_select">Select Testimonial</label>
    <br>
    <select name="testimonial_select" id="testimonial_select">
     <option value="0" <?php selected( $selected, '0' ); ?>>None</option>
    <?php 
     $args = array('post_type' => 'testimonial','posts_per_page' => -1);
              $loop = get_posts($args);


               foreach ($loop as $post) : setup_postdata($post);
               $name = $post->post_title;
                $link = $post->ID;
               ?>
      <option value="<?php echo $link; ?>" <?php selected( $selected, $link ); ?>><?php echo $name; ?></option>
     <?php
              endforeach;
    ?>
    </select>
   </p>
<?php
}

add_action( 'save_post', 'testimonial_select_box_save' );
function testimonial_select_box_save( $post_id ) {
 // Bail if we're doing an auto save
 if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
 // if our nonce isn't there, or we can't verify it, bail
 if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'testimonial_meta_box_nonce' ) ) return;
 // if our current user can't edit this post, bail
 if( !current_user_can( 'edit_post' ) ) return;
 // now we can actually save the data
 $allowed = array(
            'a' => array( // on allow a tags
            'href' => array() // and those anchords can only have href attribute
    )
 );

// Probably a good idea to make sure your data is set
 if( isset( $_POST['testimonial_select'] ) )
  update_post_meta( $post_id, 'testimonial_select', esc_attr( $_POST['testimonial_select'] ) );
}

最后一个:

//allow select Post list on posts
add_action( 'add_meta_boxes', 'post_select_box_add' );
function post_select_box_add() {
 add_meta_box( 'post-box', 'Post in bottom row', 'post_select_box',$types, 'normal', 'high' );
}

function post_select_box( $post ) {
 $values = get_post_custom( $post->ID );
 $selected = isset( $values['post_select'] ) ? esc_attr( $values['post_select'][0] ) : '';
 wp_nonce_field( 'post_meta_box_nonce', 'meta_box_nonce' );
?>

   <p>
    <label for="post_select">Select Post</label>
    <br>
    <select name="post_select" id="post_select">
     <option value="0" <?php selected( $selected, '0' ); ?>>None</option>
    <?php 
     $args = array('post_type' => 'post','posts_per_page' => -1);
              $loop = get_posts($args);


               foreach ($loop as $post) : setup_postdata($post);
               $name = $post->post_title;
                $link = $post->ID;
               ?>
      <option value="<?php echo $link; ?>" <?php selected( $selected, $link ); ?>><?php echo $name; ?></option>
     <?php
              endforeach;
    ?>
    </select>
   </p>
<?php
}

add_action( 'save_post', 'post_select_box_save' );
function post_select_box_save( $post_id ) {
 // Bail if we're doing an auto save
 if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
 // if our nonce isn't there, or we can't verify it, bail
 if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'post_meta_box_nonce' ) ) return;
 // if our current user can't edit this post, bail
 if( !current_user_can( 'edit_post' ) ) return;
 // now we can actually save the data
 $allowed = array(
            'a' => array( // on allow a tags
            'href' => array() // and those anchords can only have href attribute
    )
 );

// Probably a good idea to make sure your data is set
 if( isset( $_POST['post_select'] ) )
  update_post_meta( $post_id, 'post_select', esc_attr( $_POST['post_select'] ) );
}

如您所见,功能和ID名称是唯一的,但只保存了最后一个。

这是我保存时发生的事情:

enter image description here

1 个答案:

答案 0 :(得分:1)

根据我的评论,您的每个nonce似乎都具有相同的名称(meta_box_nonce),因此如果所有三个字段都以相同的形式提交,则可能会发生冲突。尝试为他们提供唯一的名称(在wp_nonce_fieldwp_verify_nonce来电中)。