我已经读过了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))它是否覆盖了相同的记录,但我真的不知道如何修复它。
任何想法都将不胜感激。
最合适的回答,由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>\';
}