Вопрос или проблема
У меня есть архивная страница для отображения пользовательских типов записей.
Внутри 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; ?>
Объяснение кода
-
WP_Query: Здесь мы создаем запрос для получения всех записей типа "project". Параметры, такие как
posts_per_page
иorderby
, настроены в соответствии с вашими требованиями. -
Цикл while: Внутри цикла мы проверяем наличие постов и выполняем нужные действия для каждого из них.
-
Получение значения ACF: Мы используем
get_field('short_testimonial')
для получения значения. Это позволяет нам проверить, установлено ли значение в поле. -
Проверка на существование значения: Если значение существует, мы выводим его с помощью
echo
. Если же поле пустое, срабатываетelse
, где вызываетсяthe_title()
для вывода заголовка поста.
Замечания
-
Не используйте
echo
сthe_title()
: Обратите внимание, чтоthe_title()
уже выводит заголовок непосредственно, поэтому его не нужно оборачивать вecho
. Это упрощает код и обеспечивает его корректную работу. -
Лучшие практики: Убедитесь, что вы используете правильные методы для предотвращения SQL-инъекций и обеспечения совместимости с обновлениями WordPress. Рекомендуется также очищать данные перед их выводом.
Заключение
Указанный выше код позволит вам успешно отобразить заголовок поста, если пользователь не заполнил поле ACF. Следуя этим простым шагам и рекомендациям, вы сможете обеспечить правильное отображение контента на своем сайте. Не забывайте проверять обновления документации Advanced Custom Fields для получения дополнительной информации и новых возможностей.