WP MetaQuery с вложенными полями ACF - PullRequest
0 голосов
/ 22 октября 2018

Хорошо, мне нужно получить все сообщения, к которым относится текущее сообщение.Это устанавливается через поле отношений в запрашиваемых сообщениях, а не в моем текущем.Но причудой является то, что поле отношения вложено в поле повторителя для повторяющихся блоков на странице.Так что в моем "block_repeater" есть поле отношения "block_relations", и мой запрос выглядит так:

$args = array(
            'post_type' => array('post', 'page'),
            'meta_key' => 'block_relations',
            'value' => '"' . $post->ID . '"',
            'compare' => 'LIKE',
        );
$q = new WP_Query($args);

Этот запрос ничего не возвращает, и я думаю, что это из-за вложенности.В моей базе данных "postmeta" таблица для "block_relations" выглядит как "blocks_0_block_relations", "blocks_1_block_relations" и так далее.Есть ли способ сделать это в одном запросе, в отличие от запроса ко всем сообщениям, которые имеют повторитель «блоков», а затем перед каждым вопросом о моем поле и проверкой, имеет ли оно соответствующее значение?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я нашел решение, и оно не красивое.Проблема заключается в том, что вам нужно идти по ключам "blocks_0_block_relations", но метакурс ищет meta_key с оператором equals (=), поэтому вам нужно создать собственный фильтр, чтобы отфильтровать ваш конкретный запрос и изменить его, чтобы использовать сравнение LIKE.решение:

$args = array(
    'post_type' => array('post', 'page'),
    'meta_query' => array( 
        array(
            'key' => 'blocks_$_block_relations',
            'value' => $post->ID,
            'compare' => 'LIKE',
             ) 
        ),
    );
$q = new WP_Query($args);

И пользовательский фильтр для изменения предложения where:

function my_posts_where( $where ) { 
    $where = str_replace("meta_key = 'blocks_$", "meta_key LIKE 'blocks_%", $where);
    return $where;
}

add_filter('posts_where', 'my_posts_where');
0 голосов
/ 22 октября 2018

У вас неверный массив $ args

$args = array(
    'post_type' => array('post', 'page'),
    'meta_query' => array( array(
      'key' => 'block_relations',
      'value' => $post->ID,
      'compare' => 'LIKE',
    ) )
);
$q = new WP_Query($args);
...