Mendapat bidang khusus yang dipanggil startDate
tetapi hanya pada beberapa acara. Saya bertanya-tanya apakah tidak diatur untuk posting yang bisa saya gunakan post_date
untuk menghasilkan daftar posting?
// if meta_key _postmeta.startDate isn't set get the rest by posts.post_date
query_posts(
array(
array(
'posts_per_page' => 10,
'meta_key' => 'startDate',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'ASC'
),
array(
'meta_key' => 'post_date',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<'
)
)
);
Jawaban:
Jika Anda dapat menjelaskannya dalam SQL, Anda dapat menanyakannya! Ada tiga tempat di mana kami ingin mengubah kueri default:
Bergabung dan di mana-klausul yang ditambahkan melalui itu
_get_meta_sql()
fungsi . Outputnya difilter, jadi kita bisa mengaitkannya:Klausa pesanan disaring melalui
posts_orderby
:Ini memberi kami pertanyaan SQL berikut:
Ingatlah untuk melepaskan filter setelah Anda melakukan kueri, jika tidak, Anda juga akan mengacaukan pertanyaan lain. Dan jika mungkin Anda tidak harus menelepon
query_posts()
diri sendiri , tetapi memodifikasi permintaan posting utama yang dilakukan oleh WordPress saat mengatur halaman.sumber
functions.php
file tema Anda . Kemudian tepat sebelum Anda menjalankan kueri Anda menempatkan duaadd_filter()
baris. Setelah permintaan Anda menulisremove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
untuk menghapusnya lagi.coba sesuatu di sepanjang baris:
sumber
Panggilan posting permintaan membuat hanya satu permintaan, bukan dua. Jadi tidak, Anda tidak dapat membuatnya membuat dua pertanyaan terpisah dan kemudian menggabungkan hasilnya.
Ingat, Anda memilih beberapa posting di sini, lalu menampilkannya. Set itu dipilih sekaligus. Jika Anda ingin mendapatkan dua set posting yang terpisah dan kemudian menggabungkannya, itu adalah sesuatu yang harus Anda lakukan sendiri dengan get_posts atau yang serupa.
sumber