ACF, если have_rows() ничего не возвращает

#php #wordpress #advanced-custom-fields #acfpro

#php #wordpress #дополнительно-пользовательские поля #acfpro

Вопрос:

Я пытаюсь использовать поле повторителя и, похоже, не могу заставить его работать. Я думаю, что это проблема с моим оператором if, потому что, если я удалю цикл while и попробую echo out что-либо из <?php if( have_rows($aboutInfo['cards']): ?> , я ничего не получу. Я пробовал без идентификатора и жестко заданного идентификатора в качестве 2-го параметра. Кроме того, просто для проверки я сделал <?php if( !have_rows($aboutInfo['cards']): ?> и смог получить что-то для эха.

Print_r над инструкцией if отображает массив.

 <?
 /*
 Template Name: 01-Homepage
 */
 get_header(); ?>
 <? $aboutInfo = get_field( 'about' ) ?>
 <?$postid = get_the_ID(); ?>
 <div class="row">
   <div class="columns small-12 medium-7">
     <h2>
       <?= $aboutInfo['title'] ?>
     </h2>
     <p class="lead"> <?= $aboutInfo['content'] ?></p>
     <pre><?php print_r($aboutInfo['cards']) ?></pre>
     <?php if( have_rows($aboutInfo['cards'], $postid) ): ?>
       <?php while(have_rows($aboutInfo['cards'])) : the_row(); ?>
       <?php $image = get_sub_field('image') ?>
       <p><?= $image['url'] ?></p>
       <?php endwhile; ?>
     <?php endif; ?>
   </div>
 </div>
 <?php get_footer(); ?>
 

Вот как выглядит мой ACF
введите описание изображения здесь

Ответ №1:

Я думаю, вы делаете это неправильно. В вашем коде так много ошибок. проверьте https://www.advancedcustomfields.com/resources/group / и have_rows() первый параметр должен быть селектором. проверьте приведенный ниже код.

 <?php 

/* Template Name: 01-Homepage */

get_header(); 

$aboutInfo = get_field( 'about' );
$postid    = get_the_ID();

if( have_rows('about') ): 

    $title   = get_sub_field('title');
    $content = get_sub_field('content');

    ?>

    <div class="row">

        <div class="columns small-12 medium-7">

            <?php while( have_rows( 'about' ) ): the_row(); ?>

                <h2><?php echo $title; ?></h2>
                <p class="lead"><?php echo $content; ?></p>
                
                <?php if( have_rows( 'cards' ) ): while( have_rows( 'cards' ) ) : the_row(); ?>

                        <?php $image = get_sub_field( 'image' ); ?>

                        <img src="<?php echo $image['url']; ?>" />

                <?php endwhile; endif;

            endwhile; ?>    

        </div>

    </div>

<?php endif;

get_footer(); ?>
 

Комментарии:

1. Итак, это все еще не работает для меня., но, если я правильно понял ваш комментарий, я не могу передать переменную в функцию have_rows? Это правильно? Я добавил скриншот выше, чтобы показать, как настроен мой ACF. Спасибо за помощь!

Ответ №2:

Проблема заключалась в том, что я создал группу с именем «about», и «cards» были вложены в эту группу, и для доступа к этому полю мне нужно было использовать «about_cards».

 <?
 /*
 Template Name: 01-Homepage
 */
 get_header(); ?><?php while ( have_posts() ) : the_post();
​
    // group field
    $about = get_field( 'about' ); 
    
    if ( !empty( $about ) ) { ?>
​
        <div class="row">
            <div class="columns small-12 medium-7">
​
            <?php if ( !empty( $about['title'] ) ) { ?>
                <h2><?php echo esc_html( $about['title'] ); ?></h2>
            <?php }
            
            if ( !empty( $about['content'] ) ) { ?>
                <p class="lead"><?php echo wp_kses_post( $about['content'] ); ?></p>
            <?php }
​
            if( have_rows( 'about_cards' ) ) : // repeaterwhile ( have_rows( 'about_cards' ) ) : the_row(); 
​
                    $about_card_image   = get_sub_field('image');
                    $about_card_title   = get_sub_field('title');
                    $about_card_content = get_sub_field('content');
​
                    if ( !empty( $about_card_image ) ) {
                        echo wp_get_attachment_image( $about_card_image, 'medium' );
                    }
​
                    if ( !empty( $about_card_title ) ) {
                        echo '<h3>' . esc_html( $about_card_title ) . '</h3>';
                    }
​
                    if ( !empty( $about_card_content ) ) {
                        echo '<p>' . esc_html( $about_card_content ) . '</p>';
                    } ?><?php endwhile;
            endif; ?>
            </div>
        </div>
​
    <?php } // about field not empty ?><?php endwhile; // End of the loop. ?><?php get_footer(); ?>