отобразить только первый элемент типа с acf

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

я хочу отобразить только первый элемент типа и не все элементы, которые имеют тип “payment-services”. Как я могу это сделать? Надеюсь, кто-то сможет мне помочь…

<?php if( have_rows('events', 4127) ):
                    while ( have_rows('events', 4127) ) : the_row();

                        $types = get_sub_field('type');

                        foreach($types as $type) {
                            if ($type == "payment-services") { ?> 

                        <div class="item-<?php foreach($types as $type ): echo $type; echo ' ' ; endforeach; ?>">
                            <img class="events-images" src="https://wordpress.stackexchange.com/questions/317967/<?php the_sub_field("image', 4127); ?>" alt="">
                            <h2 class="events-title"><?php the_sub_field('title', 4127); ?></h2>
                            <p class="events-date"><?php the_sub_field('date', 4127); ?></p>
                            <p class="events-location"><?php the_sub_field('location', 4127); ?></p>
                            <a class="events-url btn" href="https://wordpress.stackexchange.com/questions/317967/<?php the_sub_field("url', 4127); ?>"><?php the_sub_field('url_text'); ?></a>
                        </div>

                         <?php break; ?>
                    <?php }
                        }
                endwhile;
            endif; ?>

Если я правильно понимаю, вы хотите, чтобы весь код внутри if ($type == "payment-services") выполнялся только один раз.
Возможно, есть более простой способ сделать это, но одно из предложений:

  1. Добавьте переменную с определенным значением перед вашим циклом (например, $run=”yes”)
  2. Поместите код, который вы хотите выполнить только в первый раз, внутрь оператора if, который выполняется только если вышеупомянутая переменная имеет свое исходное значение
  3. Измените значение переменной во время первой итерации, чтобы весь оператор if стал ложным в остальных итерациях цикла.

Таким образом, ваш код может выглядеть как-то так:

....
$run="yes";
foreach($types as $type) {
  if($run=="yes"){
    if ($type == "payment-services") { 

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

      $run="no";
    }       
  }
}
....

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

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

Оптимизированное решение

Вот как можно организовать код с учетом поставленной задачи:

<?php 
if (have_rows('events', 4127)) :
    while (have_rows('events', 4127)) : the_row();

        $types = get_sub_field('type');
        $firstPaymentServiceDisplayed = false; // переменная для отслеживания первого отображения

        foreach ($types as $type) {
            if (!$firstPaymentServiceDisplayed && $type == "payment-services") {
                // Выполняем блок кода только для первого элемента
                ?>
                <div class="item-<?php echo esc_attr(implode(' ', $types)); ?>">
                    <img class="events-images" src="<?php echo esc_url(get_sub_field("image", 4127)); ?>" alt="">
                    <h2 class="events-title"><?php the_sub_field('title', 4127); ?></h2>
                    <p class="events-date"><?php the_sub_field('date', 4127); ?></p>
                    <p class="events-location"><?php the_sub_field('location', 4127); ?></p>
                    <a class="events-url btn" href="<?php echo esc_url(get_sub_field("url", 4127)); ?>"><?php the_sub_field('url_text'); ?></a>
                </div>
                <?php 
                $firstPaymentServiceDisplayed = true; // Устанавливаем значение переменной в true, чтобы код больше не выполнялся
                break; // Выход из цикла, так как мы уже нашли и показали первый элемент
            }
        }
    endwhile;
endif; 
?>

Пояснение этапов

  1. Переменная $firstPaymentServiceDisplayed: инициализируется как false, чтобы отслеживать, был ли уже показан элемент. Это позволяет выполнить блок кода только один раз при нахождении первого элемента с типом "payment-services".

  2. Условный оператор: проверяем, является ли текущий элемент "payment-services" и был ли он уже показан. Если оба условия выполняются, код выполняется, и переменная устанавливается в true.

  3. Выход из цикла: как только элемент отображён, мы выходим из цикла с помощью break, чтобы избежать дальнейших итераций.

SEO Оптимизация

Чтобы оптимизировать ваш код с точки зрения SEO:

  • Используйте семантические теги (например, <article>, если это уместно).
  • Убедитесь, что атрибуты alt для изображений содержат описания, что улучшает доступность.
  • Применяйте функции esc_url() и esc_attr() для безопасного отображения URL и атрибутов с целью предотвращения XSS-атак.

С помощью этого подхода вы не только улучшите производительность кода, но и обеспечите его безопасность, а также соответствие стандартам разработки WordPress.

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

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