На сайте функция the_title() возвращает заголовок страницы, хотя насколько мне известно должна возвращать заголовок первого поста. Что я упустил?

Ссылка скопирована
PHP
1 ответ

Код выводит заголовок страницы вместо заголовка поста. Что я упустил или делаю не так?

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>      <p><?php the_title( ''); ?></p> <?php endwhile; else: ?>      Нет записей <?php endif; ?>

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <p><?php the_title( ''); ?></p> <?php endwhile; else: ?> Нет записей <?php endif; ?>

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция по БД Ответ

Вы ничего не упустили в синтаксисе цикла, но неверно понимаете, что именно находится в текущем запросе. Функция the_title() выводит заголовок текущего объекта в Loop. Если вы находитесь на обычной странице, текущий объект — это страница. Поэтому и выводится заголовок страницы.

Чтобы получить заголовок первого поста, нужно сделать запрос к постам:

$query = new WP_Query([
    'post_type'      => 'post',
    'posts_per_page' => 1,
    'post_status'    => 'publish',
]);
 
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<p>' . esc_html(get_the_title()) . '</p>';
    }
    wp_reset_postdata();
} else {
    echo 'Нет записей';
}

$query = new WP_Query([ 'post_type' => 'post', 'posts_per_page' => 1, 'post_status' => 'publish', ]); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); echo '<p>' . esc_html(get_the_title()) . '</p>'; } wp_reset_postdata(); } else { echo 'Нет записей'; }

Если нужно вывести несколько последних постов, увеличьте posts_per_page. Если нужен первый пост по дате публикации от старого к новому, задайте сортировку:

'orderby' => 'date',
'order'   => 'ASC',

'orderby' => 'date', 'order' => 'ASC',

Важно: have_posts() без нового WP_Query всегда работает с глобальным запросом WordPress. На странице это не блог. На архиве это архив. На single это одна запись. Поэтому для блоков «последние новости», «похожие записи», «все посты» почти всегда создают отдельный запрос.

Также не надо передавать пустую строку в the_title('') без необходимости. Если хотите получить заголовок как строку, используйте get_the_title(), а если выводите на экран — the_title() или echo esc_html(get_the_title()).

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно