Dapatkan posting berdasarkan nilai meta

27

Saya ingin mendaftar semua posting yang memiliki kunci cp_annonceurdengan nilainya professionnel.

Pemula
sumber
8
Perlu diketahui bahwa Anda diharapkan telah meneliti masalah dan berusaha memecahkannya sebelum mengirim pertanyaan. Seandainya Anda tidak baru di sini, saya mungkin akan memilih-turun pertanyaan dan pindah, daripada menjawabnya. Dalam semangat "Selamat datang di Stack" ini adalah lebah bebas Anda. Silakan lihat Cara Mengajukan Pertanyaan di masa mendatang.
s_ha_dum
Yang ini hanya membuat saya kehilangan waktu karena jawaban yang tidak diterima di bawah. Jadi saya akan meninggalkan 2 sen saya di sini. Dia tidak pernah menjawab, atau menerima jawaban di bawah ini. Mengapa Anda tidak menghapus saja pertanyaan ini sementara ada puluhan pertanyaan serupa di sekitar sini?
mircobabini

Jawaban:

47

Apa yang Anda minta adalah a meta_query

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

Semua informasi yang Anda butuhkan ada dalam Codex .

s_ha_dum
sumber
3
@ Pemula: jika ini menyelesaikan masalah, silakan tandai "Diterima". Cari tanda centang di dekat panah suara di sebelah kiri.
s_ha_dum
8

Ada dua cara untuk melakukan itu:

  1. Mencegah kueri utama pada 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. Tambahkan kueri tambahan

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );
kaisar
sumber
2
Senang mengetahui jalan pintas dengan get_posts ()
Andrew Welch
8

Saya menggunakan pilihan khusus (mungkin kinerja yang lebih baik)

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

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

michalzuber
sumber
1
Ini mungkin memiliki kinerja yang lebih baik, tetapi membuang seluruh gagasan memiliki fungsi Wordpress untuk mencari (dan cache) data. Dan, juga, apa yang akan terjadi jika WP memutuskan untuk mengubah struktur tabel? :)
Erenor Paz
2

Kita bisa mendapatkan hasil yang diinginkan dengan Meta query di 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 );

Untuk panduan lebih rinci mengenai kueri meta, ikuti blog ini: http://www.codecanal.com/get-posts-meta-values/

Dam Jitendra
sumber
Bolehkah saya tahu mengapa post_per_pagenilai ini -1?
Abhay Gawade
1
@AbhayGawade Anda dapat membatasi jumlah hasil maksimal menggunakan parameter itu, -1 berarti tanpa batas.
Kush