#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(); ?>
Ответ №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' ) ) : // repeater
while ( 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(); ?>