ฉันเห็นคนจำนวนมากชอบใช้ 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