ACF wp_query по полю которое в repeater, которое в поле repeater

Необходимо сделать поиск постов по наличию ACF поля типа number, которое находится в повторителе, который находится в еще одном повторителе.

Структура такая, что бы нагляднее было: —Repeater — —Repeater — — — Number( по нему хочу сделать поиск)

Однако нашел инструкцию на официальном сайте плагина Advanced Custom Fields как сделать поиск по полю повторителя. Но об более глубокой вложенности там речи не идет.

Подскажите пожалуйста, как реализовать запрос по более глубокой вложенности?


Ответы (1 шт):

Автор решения: noname228

На официальном сайте есть подробная документация https://www.advancedcustomfields.com/resources/query-posts-custom-fields/

По данной документации для текущей вложенности получается такая структура (repeater1 > repeater2 > field):

<?php 
// filter
function my_posts_where( $where ) {
    $where = str_replace("meta_key = 'repeater1_repeater2_$", "meta_key LIKE 'repeater1_%_repeater2_%", $where);
    return $where;
}
add_filter('posts_where', 'my_posts_where');

// args
$args = array(
    'numberposts'   => -1,
    'post_type'     => 'page',
    'meta_query'    => array(
        'relation'      => 'OR',
        array(
            'key'       => 'repeater1_repeater2_$_field',
            'compare'   => '=',
            'value'     => '2',
        ),
    )
);

// query
$the_query = new WP_Query( $args );
?>

<?php if( $the_query->have_posts() ): ?>
    <ul>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile; ?>
    </ul>
<?php endif; ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>

PS: В данном примере выводятся все страницы с полем field равным 2, которое находится внутри двух повторителей.

→ Ссылка