Kueri khusus dengan meta_value bidang kustom

37

Aa lho, per WP3.0 ada opsi untuk kueri lanjutan khusus, yang bagus. Pada saat ini, beberapa parameter kueri bidang khusus seperti meta_key, meta_value sudah tidak digunakan lagi untuk parameter meta_query baru ( lihat di sini )

Saya mencoba untuk memiliki kueri yang cukup sederhana dengan sintaks baru, permintaan posting oleh post_type (layanan) tertentu yang berisi meta_key tertentu (order_in_archive) - ini berjalan dengan baik seperti yang diharapkan. Tapi - Saya ingin mengatur kueri dengan meta_value, dan tidak berhasil.

Ini permintaan saya -

   query_posts(
    array(  'post_type' => 'services',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'meta_query' => array(
            array('key' => 'order_in_archive'))
    )
);

Saya mencoba orderby juga dengan meta_value_numeric dan meta_value, tetapi dalam hal apa pun hasilnya sedang dipesan pada tanggal publikasi (seperti halnya posting reguler). Adakah yang tahu bagaimana ini bisa dilakukan?

Terima kasih

Maor Barazany
sumber

Jawaban:

35

Anda dapat menentukan kunci meta untuk parameter orderby menggunakan metode lama (saya diuji pada WP 3.1.1) ...

query_posts(
    array(  'post_type' => 'services',
            'order'     => 'ASC',
            'meta_key' => 'some_key',
            'orderby'   => 'meta_value', //or 'meta_value_num'
            'meta_query' => array(
                                array('key' => 'order_in_archive',
                                      'value' => 'some_value'
                                )
                            )
    )
);
Ján Bočínec
sumber
15

Masalah ini secara umum diselesaikan di WordPress 4.2 dengan menggunakan kueri bernama. misalnya

$args = array(
  'post_type' => 'services',
  'orderby'   => 'order_clause',
  'meta_query' => array(
       'order_clause' => array(
            'key' => 'order_in_archive',
            'value' => 'some_value',
            'type' => 'NUMERIC' // unless the field is not a number
)));

Bagi saya, saya ingin memesan oleh bidang numerik dan saya harus menggunakan 'type' => 'NUMERIC'di dalam meta query.

Ryan Taylor
sumber
1
Temuan luar biasa pada kueri bernama!
Kaji
Yap, pertanyaan bernama menjawab pertanyaan untuk saya juga.
Dalton
Luar biasa. Saya tidak yakin signifikansi 'nilai' dalam order_clause itu karena tidak diperlukan karena akan memesannya dengan nilai tertinggi dari 'order_in_archive'.
Andrew Schultz
10

WP Codex sebenarnya membingungkan ketika menangani masalah ini.

Anda tidak benar-benar membutuhkan param meta_query untuk menggunakan orderby, sebaliknya ia menggunakan param meta_key, yang walaupun oleh WP Codex sudah usang telah dibuat di sini: Bagaimana Anda menggunakan orderby dengan meta_query di Wordpress 3.1? pesanan itu masih membutuhkan meta_key.

memang seharusnya begitu

query_posts( array(
  'post_type' => 'services',
  'order' => 'ASC',
  'orderby' => 'meta_value',
  'meta_key' => 'order_in_archive'
) )
Evan Yeung
sumber
2
Ya, ini adalah metode lama untuk melakukan kueri ini dan tampaknya berfungsi untuk yang ditentukan ini. Bagaimanapun, untuk pertanyaan yang lebih kompleks, itu tidak akan berfungsi. Saya menemukan ini adalah masalah yang diketahui sedang diurus, perinciannya dapat ditemukan di tiket trac # 15031 dan # 17065
Maor Barazany
2

Mudah:

Ini kode saya:

query_posts(array( 
        'post_type' => 'directors',
        'posts_per_page' => -1,
        'order'    => 'ASC',
        'orderby'  => 'director_weight',
        'meta_key' => 'director_weight'
) );

Detail utama adalah: termasuk meta_key, kode saya tidak memesan kecuali meta_keydisertakan, dan itu saja:

Ini adalah kode lengkap dari daftar directorsgambar yang dipesan oleh director_weight:

<?php 
    query_posts(array( 
        'post_type' => 'directors',
        'posts_per_page' => -1,
        'order'    => 'ASC',
        'orderby'  => 'director_weight',
        'meta_key' => 'director_weight'
    ) );
    while (have_posts()) : the_post();
?>  
    <li <?php echo get_field('director_weight') ?>>
        <img src="<?php echo get_field('director_imagen') ?>">
    </li>
<?php
    endwhile;
    wp_reset_query();
?>

order_by custom wordpress

Yesus CMD
sumber
1

Jangan gunakan kueri_post.

$meta_query = new WP_Meta_Query( $meta_query_args );

$meta_query_args = array(
   'post_type' => 'services',
    'order'     => 'ASC',
    'meta_key' => 'your_key',
    'orderby'   => 'meta_value', //or 'meta_value_num'
    'meta_query' => array(
                    array('key' => 'order_in_archive',
                        'value' => 'some_value'
)));

Gunakan parameter WP_Meta_Query

Brad Dalton
sumber
0

Saya menemukan ini berfungsi dengan baik.

<?php 
query_posts(
array(  'posts_per_page' => '-1',
        'post_type' => 'services',
        'order'     => 'DESC',
        'meta_key' => '_order',
        'orderby'   => 'meta_value_num', //or 'meta_value_num'
      )
);
Gegere
sumber
3
Pertanyaannya adalah tentang meta_queryparameter new-ish dan mendapatkan orderbyuntuk bekerja dengannya, dan bukan tentang yang lebih tua tapi masih fungsional meta_key/ meta_valueparameter. Juga, jangan mendorong penggunaan query_posts.
s_ha_dum
Jawaban ini berisi beberapa praktik buruk: menggunakan -1, meneruskannya sebagai string, menggunakan query_posts. Itu harus dihapus.
Ihor Vorotnov
0

Saya memiliki satu set tanggal acara khusus yang saya butuhkan untuk mengurutkan berdasarkan tanggal turun. Karena tanggal acara khusus saya disimpan di tabel wp_postmeta saya, dan biasanya berbeda dengan tanggal post_date atau tanggal yang diubah, ini berfungsi untuk saya:

  $args = array(
    'post_type' => 'events', // my post type - yours can be 'posts'
    'post_status' => 'publish', // only get posts with this status
    'orderby' => 'meta_value', // orderby the meta_value of the following meta_key
    'meta_key' => 'my_custom_eventdate', // the custom meta_key name
    'order'=> 'DESC' // sort descending
  );

  $posts = new WP_Query($args);

Anda kemudian dapat mengulangi $ post seperti ini:

foreach($posts->posts as $p){

    $post_id = $p->ID;
    // and so on ...

    // # example of how I retrieve my event date
    $event = get_post_meta($post_id, 'my_custom_eventdate', true);
}
berulang
sumber
0

Ini bekerja untuk saya,

    $args = array(
        'post_type' => 'services',
        'order' => 'ASC',
        'orderby'   => 'order_clause',   
        'meta_query' => array(
        'order_clause' => array(
        'key' => 'order_in_archive'
    )));

Hanya perlu memberikan kunci untuk pesanan_clause

pingle60
sumber