Получить сообщения по мета-значению

27

Я хотел бы перечислить все сообщения, которые имеют ключ cp_annonceurсо значением professionnel.

начинающий
источник
8
Пожалуйста, имейте в виду, что вы, как ожидается, изучили проблему и попытались решить ее, прежде чем отправлять вопрос. Если бы вы не были новичком здесь, я бы, вероятно, отклонил вопрос и пошел бы дальше, а не отвечал на него. В духе «Добро пожаловать в стек» это ваша свободная пчела. Пожалуйста, ознакомьтесь с разделом Как задать вопрос на будущее.
s_ha_dum
Этот только что заставил меня потерять некоторое время из-за непринятого ответа ниже. Так что я оставляю здесь свои 2 цента. Он никогда не отвечал и не принимал ответ ниже. Почему бы вам просто не удалить эти вопросы, в то время как здесь есть десятки подобных вопросов?
Миркобабини

Ответы:

47

То, что вы просите, это meta_query

$args = array(
   'meta_query' => array(
       array(
           'key' => 'cp_annonceur',
           'value' => 'professionnel',
           'compare' => '=',
       )
   )
);
$query = new WP_Query($args);

Вся необходимая информация содержится в Кодексе .

s_ha_dum
источник
3
@ Начинающий: если это решило проблему, отметьте это как «Принят». Ищите галочку рядом со стрелками голосования слева.
s_ha_dum
8

Есть два способа сделать это:

  1. Перехватить основной запрос на pre_get_posts:

    add_action( 'pre_get_posts', function( $query )
    {
        // only handle the main query
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
  2. Добавить дополнительный запрос

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );
кайзер
источник
2
Приятно знать короткий путь с get_posts ()
Эндрю Уэлч
8

Я использовал пользовательский выбор (может быть лучше производительность)

$posts = $wpdb->get_results("SELECT * FROM $wpdb->postmeta
WHERE meta_key = 'cp_annonceur' AND  meta_value = 'professionnel' LIMIT 1", ARRAY_A);

По мотивам https://tommcfarlin.com/get-post-id-by-meta-value/

michalzuber
источник
1
Возможно, он имеет лучшую производительность, но он отбрасывает всю идею наличия функций Wordpress для поиска (и кеширования) данных. А также, что произойдет, если WP решит изменить структуру таблицы? :)
Эренор Пас
2

Мы можем получить желаемый результат с помощью мета-запроса WordPress:

// the meta_key 'diplay_on_homepage' with the meta_value 'true'
$cc_args = array(
    'posts_per_page'   => -1,
    'post_type'        => 'post',
    'meta_key'         => 'cp_annonceur',
    'meta_value'       => 'professionnel'
);
$cc_query = new WP_Query( $cc_args );

Для более подробного руководства по мета-запросу следуйте этому блогу: http://www.codecanal.com/get-posts-meta-values/

Джитендра Дамор
источник
Могу ли я знать, почему это post_per_pageзначение -1?
Абхай Гаваде
1
@AbhayGawade С помощью этого параметра вы можете ограничить максимальное количество результатов, -1 означает отсутствие ограничений.
Куш