Saya menemukan pertanyaan ini:
Apakah ada cara untuk menggunakan $ query-> set ('tax_query' di filter pre_get_posts?
yang tampaknya menunjukkan bahwa ya, Anda dapat mengubah kueri taksonomi pada arsip taksonomi melalui pre_get_posts (). jadi saya datang dengan
add_action('pre_get_posts', 'kia_no_child_terms' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$wp_query->tax_query->queries[0]['include_children'] = 0;
}
}
sebaik
add_action('pre_get_posts', 'kia_no_child_terms' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$tax_query = $wp_query->get( 'tax_query' );
$tax_query->queries[0]['include_children'] = 0;
$wp_query->set( 'tax_query', $tax_query );
}
}
untuk mencoba mengatur parameter include_children ke false ... dan hampir setiap kombinasi dari keduanya dapat saya pikirkan. Namun sejauh ini, arsip taksonomi masih menunjukkan item dalam istilah anak
dan tes berikut sepertinya menambah ADD permintaan pajak bukannya menimpa mereka ... yang hanya membingungkan saya.
function dummy_test( $wp_query){
$tax_query = array(
'relation' => 'OR',
array(
'taxonomy' => 'tax1',
'terms' => array( 'term1', 'term2' ),
'field' => 'slug',
),
array(
'taxonomy' => 'tax2',
'terms' => array( 'term-a', 'term-b' ),
'field' => 'slug',
),
);
$wp_query->set( 'tax_query', $tax_query );
);
add_action('pre_get_posts','dummy_test');
bukankah SET harus menimpa nilai saat ini?
pre-get-posts
advanced-taxonomy-queries
helgatheviking
sumber
sumber
Jawaban:
Saya tahu ini adalah pertanyaan lama, tapi agak membingungkan dan mudah-mudahan akan membantu seseorang. Alasan `set kueri-> tidak berfungsi adalah karena kueri telah diuraikan dan sekarang kita juga perlu memperbarui objek tax_query. Inilah cara saya melakukannya:
sumber
Pada Wordpress 3.7 tindakan baru bernama
parse_tax_query
ditambahkan persis untuk tujuan ini.Hook ini mengubah nilai query_vars dan tax_query. Menggunakan
pre_get_posts
metode menghasilkan duplikat pertanyaan taksonomi, setidaknya bagi saya.Sebelum ke 3.7 Anda harus menggunakan
pre_get_posts
tindakan sebagai gantinya, sebagaimana dirinci dalam jawaban lainnya.sumber
$wp_query
, menggunakan tag templat, atau keduanya, atau beberapa logika lain, untuk menentukan apakah kueri harus dimodifikasi di tempat pertama.Saya tidak bisa menjalankan ini dengan kombinasi
pre_get_posts
atauparse_query
. Saya bisa melakukannya dengan relatif mudah dengan memusnahkan objek permintaan setelah dibuat. Saya tidak suka karena saat itu saya menjalankan kueri dua kali, tetapi akhirnya saya berusaha untuk menjadi "efisien."Jadi sampai seseorang datang dengan jawaban yang lebih baik, ini adalah satu-satunya metode yang saya temukan sejauh ini.
EDIT:
Mengadaptasi jawaban dari @Tanner Moushey, saya akhirnya bisa membuat pekerjaan ini untuk mengecualikan semua istilah anak dari arsip taksonomi di
pre_get_posts
hook tanpa double-query yang tidak efisien.sumber
include_children
parameter melaluipre_get_posts
hook. BaiklahBagi mereka yang menyukai saya terjebak dengan masalah ini, saya menemukan sesuatu yang bermanfaat. Saya menggunakan sistem prioritas
Permintaan saya tidak termasuk dalam hasil dan pencarian rusak dengan pengecualian saya. Semoga ini bisa membantu.
sumber