#wordpress #custom-post-type #user-roles
#wordpress #пользовательский тип записи #роли пользователей
Вопрос:
Я создал CPT, issue_chapter и новый пользовательский переводчик. Теперь, как можно добавить выпадающий список со списком переводчиков в этом CPT? «Автор» и «Переводчик» оба должны быть там.
Я создал метабокс
add_meta_box(
'translator',
'Translator',
'zc_translator_meta_box_callback',
'issue_chapter',
'advanced',
'high' );
function zc_translator_meta_box_callback( $post ) {
$role = 'translator';
$query_users_ids_by_role = array(
'field' => 'id',
'role' => $role
);
$array_of_users_ids = get_users( $query_users_ids_by_role );
$users_ids_list = implode( ',',$array_of_users_ids );
$query_for_dropdown = array(
'include' => $user_ids_list,
);
wp_dropdown_users( $query_for_dropdown );
}
Теперь как сохранить значение?
Спасибо.
Ответ №1:
Это решение. Спасибо.
add_meta_box( 'the_translator',
'Translator',
'zc_the_translator_callback',
'issue_chapter',
'advanced',
'high'
);
add_action( 'save_post', 'zc_save_the_translator_data' );
function zc_the_translator_callback( $post ){
wp_nonce_field( 'zc_save_the_translator_data', 'zc_the_translator_meta_box_nonce' );
$value = get_post_meta( $post->ID, '_the_translator_value_key', true );
?>
<label for="zc_the_translator_field">Translator</label>
<select name="zc_the_translator_field" id="zc_the_translator_field">
<option value="0">-- Select Translator --</option>
<?php
$args = array(
'role' => 'translator'
);
$user_list = get_users($args);
foreach( $user_list as $user ) : setup_postdata($post); ?>
<option value="<?php echo $user->ID; ?>" <?php selected($value, $user->ID); ?>><?php echo $user->user_nicename ; ?></option>
<?php endforeach; ?>
</select>
<?php
}
function zc_save_the_translator_data( $post_id ){
if( !isset( $_POST['zc_the_translator_meta_box_nonce']) ){
return;
}
if( !wp_verify_nonce( $_POST['zc_the_translator_meta_box_nonce'], 'zc_save_the_translator_data' ) ){
return;
}
if( defined('DOING_AUTOSAVE') amp;amp; DOING_AUTOSAVE ){
return;
}
if( !current_user_can( 'edit_post', $post_id ) ){
return;
}
if( !isset( $_POST['zc_the_translator_field']) ){
return;
}
$my_data = sanitize_text_field( $_POST['zc_the_translator_field'] ) ;
update_post_meta( $post_id, '_the_translator_value_key', $my_data );
}
Чтобы получить значение, используйте это:
<?php echo get_post_meta( $post->ID, '_the_translator_value_key', true ); ?>