Otrzymuj posty według wartości meta

27

Chciałbym wymienić wszystkie posty, które mają klucz cp_annonceurz wartością professionnel.

Początkujący
źródło
8
Należy pamiętać, że oczekuje się, że zbadałeś problem i podjąłeś próbę jego rozwiązania przed opublikowaniem pytania. Gdybyście nie byli tu nowiutcy, prawdopodobnie zlekceważylibyśmy to pytanie i poszliście dalej, zamiast na nie odpowiedzieć. W duchu „Welcome to the Stack” jest to twoja wolna pszczoła. Zobacz, jak zadawać pytania w przyszłości.
s_ha_dum
Ten właśnie spowodował, że straciłem trochę czasu z powodu nieakceptowanej odpowiedzi poniżej. Więc zostawiam tutaj moje 2 centy. Nigdy nie odpowiedział ani nie przyjął odpowiedzi poniżej. Dlaczego po prostu nie usuniecie tych pytań, skoro są tu dziesiątki podobnych pytań?
mircobabini

Odpowiedzi:

47

O co prosisz, to meta_query

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

Wszystkie potrzebne informacje znajdują się w Kodeksie .

s_ha_dum
źródło
3
@ Początkujący: jeśli to rozwiązało problem, zaznacz go jako „Zaakceptowany”. Poszukaj znacznika wyboru obok strzałek głosowania po lewej stronie.
s_ha_dum
8

Można to zrobić na dwa sposoby:

  1. Przechwyć główne zapytanie na 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. Dodaj dodatkowe zapytanie

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );
kajzer
źródło
2
Miło jest poznać krótką drogę z get_posts ()
Andrew Welch
8

Użyłem niestandardowego wyboru (może być lepsza wydajność)

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

Inspirowany https://tommcfarlin.com/get-post-id-by-meta-value/

Michalzuber
źródło
1
Może mieć lepszą wydajność, ale odrzuca cały pomysł posiadania funkcji Wordpress do wyszukiwania (i buforowania) danych. A także, co się stanie, jeśli WP zdecyduje się zmienić strukturę tabeli? :)
Erenor Paz
2

Możemy uzyskać pożądany wynik za pomocą zapytania Meta 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 );

Bardziej szczegółowy przewodnik dotyczący meta-zapytania można znaleźć na tym blogu: http://www.codecanal.com/get-posts-meta-values/

Jitendra Damor
źródło
Czy mogę wiedzieć, dlaczego ta post_per_pagewartość wynosi -1?
Abhay Gawade
1
@AbhayGawade Za pomocą tego parametru można ograniczyć maksymalną liczbę wyników, -1 oznacza brak limitu.
Kush,