如何在WordPress中动态保存多个复选框值

时间:2016-08-24 作者:mkafiyan

我已经读过了this 但这对我没有帮助。我创建了metabox来连接2个自定义帖子类型(“author”和“book”),这样当用户想要添加新书时,可以从metabox中选择author。

当我想将书的作者保存到db时,只需将最后一位作者存储在db中(wp\\U Posteta表)。

这是我的密码

我的metabox

add_action(\'admin_init\', \'p2p2_add_author_metabox\');

add_action(\'admin_init\', \'p2p2_add_author_metabox\');

function p2p2_add_author_metabox(){
    add_meta_box( 
        \'book_author\', 
        __(\'نویسنده کتاب\', \'bandpress\'), 
        \'p2p2_book_author_metabox\', 
        \'book\', 
        \'side\', 
        \'default\', 
        array( \'id\' => \'p2p2_author\') 
    );
}
在书本中显示自定义帖子类型

function p2p2_book_author_metabox($post, $args) {
 wp_nonce_field( plugin_basename( __FILE__ ), \'p2p2_book_author_nonce\' );
 $author_id = get_post_meta($post->ID, \'p2p2_book_author\', true);
 echo "<p>انتخاب نویسنده کتاب</p>";
  // Query the authors here
  $query = new WP_Query( \'post_type=author\' );
   while ( $query->have_posts() ) {
        $query->the_post();
        $id = get_the_ID();
        $input_check = "";
        $cooaprate=get_field(\'auth-trans\'); 
       if(($cooaprate[0]==\'نویسنده\')){



         $input_check="checked($author_id[$id][0],\'yes\')";
          echo \'<input name="save-author-to-book[]" type="checkbox"\' . $input_check . \' value=\' . $id ; 

            if (get_post_meta( $post_id, $key,$id )) {
            echo " checked";

          }


          echo \'>\' . get_the_title() . \'</br>\';







        }

}
}
保存在数据库中

add_action( \'save_post\', \'p2p2_save_author_metabox\' );
    function p2p2_save_author_metabox( $post_id) {
       if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
        return;
    if ( !isset( $_POST[\'p2p2_book_author_nonce\'] ) )
        return;
    if ( !wp_verify_nonce( $_POST[\'p2p2_book_author_nonce\'], plugin_basename( __FILE__ ) ) )
        return;
    if (isset($_POST[\'save-author-to-book\'])) {




    $key = \'save-author-to-book\';
    $values = $_POST["save-author-to-book"];

    foreach ($values as $value) {


    if ( get_post_meta( $post_id, $key, true ) ) { // If the custom field already has a value


        update_post_meta( $post_id, $key, $value);
    } else { // If the custom field doesn\'t have a value


        add_post_meta( $post_id, $key, $value );
    }
    if ( !$value ) delete_post_meta( $post_id, $key ); // Delete if blank
}
 }


}
我知道问题来自于(get\\u post\\u meta($post\\u id,$key,true))它是否覆盖了相同的记录,但我真的不知道如何修复它。

任何想法都将不胜感激。

1 个回复
最合适的回答,由SO网友:Mohammad Mursaleen 整理而成

在这里,您可以将信息保存在数组中,并将该数组保存在您的帖子元中。

像这样的事情会奏效;

$key = \'save-author-to-book\';
$values_to_save = array();
$new_values = $_POST["save-author-to-book"];
$existing_values = get_post_meta( $post_id, $key, true ) ;

if(!empty($existing_values)){
   foreach($existing_values as $existing_value){
      $values_to_save[] = $existing_value;
   }
}


if(!empty($new_values)){
   foreach($new_values as $new_value ){
      $values_to_save[] = $new_value ;
   }
}

 update_post_meta( $post_id, $key, $values_to_save ); // you don\'t need to use if condition as  update post meta will take care
下面是如何显示存储在数组中的信息;

$key = \'save-author-to-book\';
$values = get_post_meta( $post_id, $key, true );

foreach($values as $value){
   echo $value . \'<br>\';
}

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {