Запрос постов или получение постов по произвольным полям, возможно ли?

3 мар. 2011 г., 19:31:00
Просмотры: 29.2K
Голосов: 9

Если взять стандартный запрос постов.

<?php query_posts('post_type=payment'); while (have_posts()) : the_post();?>

В этот раз я хотел бы сделать запрос постов по 2 произвольным полям, которые могут в них содержаться.

<?php query_posts('post_type=payment'.get_post_meta($post->ID,'bookingref', true).get_post_meta($post->ID,'customerref', true) ); while (have_posts()) : the_post(); ?>

Это не работает. Возможно ли что-то подобное и как это сделать?

Есть идеи?

Замечательно

0
Все ответы на вопрос 1
3
19

Для запроса записей по пользовательским полям можно использовать параметр 'meta_query'

<?php
$args = array(
    'post_type' => 'payment',
    'meta_query' => array(
            array(
                'key' => 'bookingref', // ключ метаполя
                'value' => 'the_value_you_want', // искомое значение
                'compare' => 'LIKE' // тип сравнения
            ),
            array(
                'key' => 'customerref', // ключ метаполя
                'value' => 'the_value_you_want', // искомое значение
                'compare' => 'LIKE' // тип сравнения
            )
    )
);
query_posts($args); while (have_posts()) : the_post();
?>

Нельзя использовать get_post_meta внутри запроса, так как эта функция возвращает значение, а не ключ, кроме того, она требует ID записи для получения значения, а до выполнения запроса $post->id не определен.

3 мар. 2011 г. 19:40:39
Комментарии

да, это лучше моего (удаленного) ответа - meta_query это правильный способ для запроса по нескольким пользовательским ключам

anu anu
3 мар. 2011 г. 19:51:20

Потрясающе, отличная работа. Хотя вы пропустили скобку. Нужно .. )); query_posts($args) ..

Robin I Knight Robin I Knight
3 мар. 2011 г. 20:01:25

Здесь есть отличная возможность объяснить использование WP_Query и производительностные затраты meta-запросов

Tom J Nowell Tom J Nowell
17 янв. 2017 г. 21:53:39