Отримуйте повідомлення за мета-значенням


27

Я хотів би перерахувати всі повідомлення, у яких є ключ cp_annonceurзі значенням professionnel.


8
Будь ласка, майте на увазі, що ви, як очікується, дослідили проблему та спробували її вирішити, перш ніж ставити питання. Якби ви тут не були абсолютно новими, я б, мабуть, заперечив це питання і продовжував, а не відповідати на нього. У дусі "Ласкаво просимо до стека" це ваша вільна бджола. Будь ласка, подивіться, як задати майбутні питання.
s_ha_dum

Це просто змусило мене втратити деякий час через не прийняту відповідь нижче. Тому я залишаю тут свої 2 копійки. Він ніколи не відповів і не прийняв відповідь нижче. Чому б ти просто не зняти це питання, поки тут є десятки подібних питань?
mircobabini

Відповіді:


47

Те, про що ви просите, - це meta_query

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

Вся необхідна інформація знаходиться у Кодексі .


3
@Beginner: якщо це вирішило проблему, позначте її "Прийнято". Шукайте галочку біля стрілок голосування зліва.
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/


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 означає не обмеження.
Куш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.