Saya sedang mengerjakan templat laman istilah taksonomi khusus tempat kami menginginkan item yang terhubung ke istilah diurutkan berdasarkan tanggal publikasi (bidang tanggal khusus) - dan jika ada beberapa item pada hari yang sama (diformat seperti YYYY-MM- DD) untuk kemudian mengurutkan berdasarkan judul, dan akhirnya mengurutkan berdasarkan judul jika bidang khusus belum diisi (item yang lebih lama).
Jadi, saya mencobanya ratusan cara berbeda dengan WP_query dan itu mengembalikan sebagian besar hasil seperti yang saya inginkan - tetapi dalam kasus ini hanya mengembalikan item yang memiliki meta_key dari publishing_date. Semua item lainnya diabaikan dan tidak ditampilkan. Saya mencoba meta_query menggunakan relasi "atau" dan membandingkan publikasi_date sebagai EXIS dan NOT EXISTS, tetapi hasilnya 0 untuk saya.
Juga, situs masih menjalankan 3.5.2 dan mereka tidak ingin memperbarui.
Inilah kueri saya yang paling baru yang memberi saya pos-pos yang memiliki bidang kustom publishing_date ditampilkan dalam urutan yang benar:
$term = get_queried_object(); // find the term of the taxonomy page we are on
$wp_query = new WP_Query( array(
'post_type' => 'resource',
'tax_query' => array(
array(
'taxonomy' => 'resource_types',
'field' => 'slug',
'terms' => $term->name,
)),
'meta_key' => 'publication_date',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'paged' => $paged,
'posts_per_page' => '10',
));
Saya juga mencoba menggunakan wpdb dan menjalankan query SQL, tetapi saya benar-benar tidak yakin bagaimana mencapai apa yang ingin saya lakukan itu. Jika seseorang bisa membantu saya, itu akan luar biasa!
Terima kasih sebelumnya.
sumber
'meta_query' => array( 'relation' => 'OR', array( //check to see if date has been filled out 'key' => 'publication_date', 'compare' => '!=', 'value' => date('Y-m-d'), ), array( //if no date has been added show these posts too 'key' => 'publication_date', 'value' => date('Y-m-d'), 'compare' => 'NOT EXISTS' ) ),
tetapi pemesanannya tidak berfungsi: \Jawaban:
Terima kasih semuanya atas bantuan Anda!
Pada akhirnya, kueri di bawah memberi saya hasil yang saya inginkan - yaitu untuk menampilkan dan mengurutkan posting berdasarkan bidang khusus "publishing_date" terlebih dahulu - mengurutkan berdasarkan tanggal, dan jika ada beberapa dari tanggal yang sama (misalnya, 4 ditandai Juni 2013), itu akan mengurutkan berdasarkan judul. Kemudian, setelah dijalankan melalui semua posting yang memiliki Tanggal Publikasi diisi di dalamnya akan mengulang lagi posting yang tersisa, menurut abjad menurut judul.
Ini membuat saya hasil yang ditetapkan dalam permintaan yang sama, dan membuat pagination saya:
sumber
meta_query
pada kunci yang sama!meta_key
secara otomatis tidak termasuk bahkan denganNOT EXISTS
. Saya sangat berharap saya melakukan sesuatu yang salah.'meta_key' => 'publication_date',
.Beberapa tahun kemudian, kode yang diposting oleh CSSGirl tidak berfungsi untuk saya karena ada beberapa posting yang tidak memiliki kunci meta atau kunci meta kosong jadi ini yang harus saya lakukan untuk memiliki semua posting yang dipesan berdasarkan tanggal dan tunjukkan yang dengan tampilan nilai kunci meta terlebih dahulu:
sumber
Saya pikir Anda harus melakukan 2 loop terpisah. Anda dapat menangkap semua pos yang ditemukan di loop pertama dan cukup mengecualikannya dari loop sekunder:
Kemudian jalankan loop kedua Anda.
sumber
echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?page=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $publication_query->max_num_pages, 'prev_text' => __('Previous |'), 'next_text' => __('| Next'), ) );
Apakah ada alasan Anda tidak dapat menerapkan kunci meta publishing_date yang ada untuk setiap posting hanya dengan nilai kosong?
Jadi dalam
save_post
tindakan Anda, Anda akan menambahkan / memperbarui kunci meta apakah$_POST
nilainya kosong atau tidak.Anda harus menjalankan skrip pembaruan untuk mengulangi posting lama Anda dan menambahkan kunci dengan nilai kosong misalnya:
Jalankan dengan menjelajah ke http://example.com/wp-admin/?update_old_posts
Kemudian Anda dapat menggunakan kueri yang sama seperti yang Anda miliki. Anda mungkin ingin menambahkan filter tambahan untuk memungkinkan Anda memesan dengan kolom yang berbeda di arah yang berbeda, masuk akal bagi saya untuk mengurutkan berdasarkan tanggal dalam urutan menurun dan judul dalam urutan naik.
sumber
Saya membuat klausa tempat kustom. Saya mengujinya menggunakan
$wp_query->request
tepat sebelum loop utama saya, saya tidak benar-benar tahu SQL itu dengan baik, tetapi ini tampaknya membuat semuanya berfungsi.Atau, Anda bisa mengatur
compare
untuk'EXISTS'
dan mengubah baris di add_trending_where untuk$where .= " OR ($wpdb->postmeta.post_id IS NULL)";
. Maka Anda hanya perlu mengubah nilai kunci di satu tempat. Sekali lagi, gema$wp_query->request
dan mainkan jika Anda ingin memahami ini lebih baik atau men-tweak itu.EDIT: Saya baru menyadari ini tidak berfungsi jika
meta_key
diatur pada permintaan. Anda dapat menggunakan$query->set('meta_key', NULL);
jika Anda harus.EDIT 2: Saya mendapatkan ini berfungsi dengan metode di atas. Untuk beberapa alasan itu bukan pada awalnya (mungkin meta_key diatur ... saya tidak tahu).
sumber