Здравствуйте. В админку добавил тип страниц отзывы. Туда добавил meta_box. И мне на этой cтранице не нужно поле title. И после сохранения у меня все эти страницы сохраняются с title "Auto Draft". А я хочу чтобы туда записывалось одно из полей в meta_box (а именно 'name').
Вот код создания этого типа страницы и добавления мета_бокса:
add_action( 'init', 'stels48_create_reviews_posttype' );
function stels48_create_reviews_posttype() {
register_post_type( 'reviews',
array(
'labels' => array(
'name' => __( 'Отзывы' ),
'singular_name' => __( 'Отзыв' ),
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'all_items' => 'Все отзывы'
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'reviews'),
'supports' => ['thumbnail']
)
);
}
add_action('add_meta_boxes', 'review_fields', 1);
function review_fields() {
add_meta_box( 'review_fields', 'Отзывы', 'review_fields_box_func', 'reviews', 'normal', 'high' );
}
// код блока
function review_fields_box_func( $review ){
?>
<p>Текст отзыва:
<textarea type="text" name="review[text]" style="width:100%;height:50px;"><?php echo get_post_meta($review->ID, 'text', 1); ?></textarea>
</p>
<p>Имя: <input type="text" name="review[name]" value="<?php echo get_post_meta($review->ID, 'name', 1); ?>" style="width:50%" /></p>
<p>Рейтинг:<select name="review[rating]">
<?php $sel_v = get_post_meta($review->ID, 'rating', 1); ?>
<option value="0">----</option>
<option value="1" <?php selected( $sel_v, '1' )?> >1</option>
<option value="2" <?php selected( $sel_v, '2' )?> >2</option>
<option value="3" <?php selected( $sel_v, '3' )?> >3</option>
<option value="4" <?php selected( $sel_v, '4' )?> >4</option>
<option value="5" <?php selected( $sel_v, '5' )?> >5</option>
</select></p>
<input type="hidden" name="review_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}
add_action( 'save_post', 'review_fields_update', 0 );
## Сохраняем данные, при сохранении поста
function review_fields_update( $review_id ){
// базовая проверка
if (
empty( $_POST['review'] )
|| ! wp_verify_nonce( $_POST['review_fields_nonce'], __FILE__ )
|| wp_is_post_autosave( $review_id )
|| wp_is_post_revision( $review_id )
)
return false;
// Все ОК! Теперь, нужно сохранить/удалить данные
$_POST['review'] = array_map( 'sanitize_text_field', $_POST['review'] ); // чистим все данные от пробелов по краям
foreach( $_POST['review'] as $key => $value ){
if( empty($value) ){
delete_post_meta( $review_id, $key ); // удаляем поле если значение пустое
continue;
}
update_post_meta( $review_id, $key, $value ); // add_post_meta() работает автоматически
}
return $review_id;
}
Буду благодарен за любую помощь, спасибо.