Как мне показать заголовок поста, если продвинутое пользовательское поле не было использовано?

Вопрос или проблема

У меня есть архивная страница для отображения пользовательских типов записей.

Внутри WP_Query, который отображает пользовательские типы записей, я хочу отобразить ACF (Advanced Custom Field), или, если пользователь не заполнил ACF, то должно отображаться название.

Я пробовал это, и поле ACF отображается нормально, но когда оно не заполнено, название не отображается, вместо этого отображается только содержание записи.

Вот код, который у меня есть (только для раздела названия):

<?php $loop = new WP_Query( array( 'post_type' => 'project', 'posts_per_page' => -1, 'orderby' => 'menu_order' ) ); ?>

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
    <div class="project col-md-4">
    <div class="col-xs-12 short-testimonial">

        <?php if(get_field('short_testimonial')): ?>

        <?php the_field('short_testimonial'); ?>

        <?php else: ?>

        <?php echo the_title(); ?>

        <?php endif; ?>

    </div>

Если есть сомнения, сначала проверьте документацию: https://www.advancedcustomfields.com/resources/get_field/

Проверьте, существует ли значение

Этот пример показывает, как проверить, существует ли значение для поля.

$value = get_field( 'text_field' );

if ( $value ) {
    echo $value;
} else {
    echo 'пусто';
}

Таким образом, в вашем случае вам нужно использовать:

<?php

$short_testimonial = get_field( 'short_testimonial' );

if ( $short_testimonial ) {
    echo $short_testimonial;
} else {
    the_title();
}

?>

Кроме того, вы должны отметить, как упоминали другие, что вам не нужно использовать echo the_title(), так как оно выводит само себя…

Вам следует попробовать убрать “echo” из “the_title()”.

Это должно сработать

<div class="project col-md-4">
     <div class="col-xs-12 short-testimonial">
          <?php 
               if( get_field( 'short_testimonial' ) ): 
               the_field( 'short_testimonial' );
               else:
               the_title();
               endif;
          ?>    
     </div>
</div>

Вы также можете ознакомиться с официальной документацией здесь.

Вы заметите, что the_title уже отображает его по умолчанию.

<?php the_title( $before, $after, $echo ); ?>

.

Ответ или решение

Для того чтобы корректно отображать заголовок поста в случае, если поле ACF (Advanced Custom Fields) не заполнено, необходимо внести некоторые изменения в вашу текущую реализацию. Давайте рассмотрим, как это можно сделать более подробно.

Вам нужно использовать функцию get_field() для проверки наличия значения в пользовательском поле "short_testimonial". Если значение существует, сначала отображается текст этого поля; если же нет — выводится заголовок поста.

Пример кода

Вот исправленный код, который вам нужно использовать в вашем цикле WP_Query:

<?php
$loop = new WP_Query(array(
    'post_type' => 'project',
    'posts_per_page' => -1,
    'orderby' => 'menu_order'
));

while ($loop->have_posts()) : $loop->the_post(); ?>
    <div class="project col-md-4">
        <div class="col-xs-12 short-testimonial">
            <?php 
            // Получаем значение поля ACF
            $short_testimonial = get_field('short_testimonial');

            // Проверяем, заполнено ли поле 
            if ($short_testimonial) { 
                echo $short_testimonial; // Выводим значение поля, если оно существует
            } else { 
                the_title(); // Иначе выводим заголовок поста
            }
            ?>
        </div>
    </div>
<?php endwhile; ?>

Объяснение кода

  1. WP_Query: Здесь мы создаем запрос для получения всех записей типа "project". Параметры, такие как posts_per_page и orderby, настроены в соответствии с вашими требованиями.

  2. Цикл while: Внутри цикла мы проверяем наличие постов и выполняем нужные действия для каждого из них.

  3. Получение значения ACF: Мы используем get_field('short_testimonial') для получения значения. Это позволяет нам проверить, установлено ли значение в поле.

  4. Проверка на существование значения: Если значение существует, мы выводим его с помощью echo. Если же поле пустое, срабатывает else, где вызывается the_title() для вывода заголовка поста.

Замечания

  • Не используйте echo с the_title(): Обратите внимание, что the_title() уже выводит заголовок непосредственно, поэтому его не нужно оборачивать в echo. Это упрощает код и обеспечивает его корректную работу.

  • Лучшие практики: Убедитесь, что вы используете правильные методы для предотвращения SQL-инъекций и обеспечения совместимости с обновлениями WordPress. Рекомендуется также очищать данные перед их выводом.

Заключение

Указанный выше код позволит вам успешно отобразить заголовок поста, если пользователь не заполнил поле ACF. Следуя этим простым шагам и рекомендациям, вы сможете обеспечить правильное отображение контента на своем сайте. Не забывайте проверять обновления документации Advanced Custom Fields для получения дополнительной информации и новых возможностей.

Оцените материал
Добавить комментарий

Капча загружается...