@Albert1991

Как при создании страницы кодом можно задать title?

Здравствуйте. В админку добавил тип страниц отзывы. Туда добавил 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;
}


Буду благодарен за любую помощь, спасибо.
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@cema93
WordPress разработчик
можно в момент сохранения доп полей сделать программную замену title
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы