ฉันเห็นคนจำนวนมากชอบใช้ pre_get_posts hook แทนที่จะเป็น query_posts
เย้!
ดังนั้นpre_get_posts
กรองWP_Query
วัตถุซึ่งหมายถึงสิ่งที่คุณสามารถทำผ่านquery_posts()
ที่คุณสามารถทำได้ผ่านทางและ$query->set()
$query->get()
โดยเฉพาะอย่างยิ่งเราสามารถใช้ประโยชน์จากmeta_query
คุณลักษณะ (ดูCodex ):
$meta_query = array(
array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
),
);
$query->set('meta_query',$meta_query);
แต่ .. สิ่งนี้จะแทนที่ 'แบบสอบถามเมตา' ดั้งเดิม (ถ้ามี) ดังนั้นหากคุณไม่ต้องการแทนที่แบบสอบถามเมตาเดิมทั้งหมดฉันขอแนะนำ:
//Get original meta query
$meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$meta_query[] = array(
'key'=>'featured',
'value'=>'yes',
'compare'=>'!=',
);
$query->set('meta_query',$meta_query);
วิธีนี้เราเพิ่มการสืบค้นเมตาของเราควบคู่ไปกับการสืบค้นเมตาที่มีอยู่
คุณอาจ / อาจไม่ต้องการตั้งค่าrelation
คุณสมบัติของ$meta_query
เป็นAND
หรือOR
(เพื่อส่งคืนโพสต์ที่ตรงกับข้อความค้นหาทั้งหมดหรืออย่างน้อยหนึ่งรายการ)
* หมายเหตุ:ชนิดของแบบสอบถามนี้จะกลับโพสต์กับ 'จุดเด่น' คีย์ meta yes
แต่มีค่าไม่ได้ จะไม่รวมโพสต์ที่ไม่มีคีย์เมตา 'ที่โดดเด่น' คุณจะสามารถที่จะทำเช่นนี้ใน 3.5