WordPress Meta_Query: ทุกสิ่งที่คุณต้องรู้

เผยแพร่แล้ว: 2022-04-30

หนึ่งในเครื่องมือที่ทรงพลังที่สุดใน WordPress คือความสามารถในการเพิ่มฟิลด์ที่กำหนดเองในโพสต์ นักพัฒนาหลายคนใช้ฟิลด์กำหนดเองขั้นสูงหรือฟิลด์เมตาแบบกำหนดเองสำหรับโพสต์

ในบทความนี้ เราจะพูดถึงวิธีการสืบค้นโพสต์ตามฟิลด์ที่กำหนดเองโดยใช้ฟังก์ชัน meta_query ใน WordPress ซึ่งจะเป็นประโยชน์สำหรับไซต์ที่มีฟังก์ชันการทำงานแบบกำหนดเองมากมาย


โพสต์ข้อความค้นหาตามค่า Meta

วิธีที่นิยมที่สุดในการค้นหาโพสต์ด้วยฟิลด์ที่กำหนดเองคือการกำหนดเป้าหมายค่าเมตาเฉพาะค่าหนึ่ง ตัวอย่างเช่น สมมติว่าเรามีไซต์ที่โพสต์มีฟิลด์ที่กำหนดเองซึ่งใช้ในการพิจารณาว่าโพสต์นั้นเป็น "เนื้อหาเด่น" หรือไม่ นี่เป็นเรื่องปกติเมื่อสร้างส่วนแนะนำบนไซต์ WordPress

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'featured_post' ,
'value' => 'yes' ,
'compare' => '='
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value.php hosted with by GitHub

แน่นอนว่าโค้ดข้างต้นจะแตกต่างกันไปขึ้นอยู่กับสิ่งที่คุณตั้งชื่อฟิลด์และคีย์เมตาของคุณ แต่ 'คีย์' คือชื่อของฟิลด์ที่กำหนดเอง ในขณะที่ 'ค่า' คือสิ่งที่เรากำลังค้นหาโพสต์ ฟิลด์ 'เปรียบเทียบ' ใช้สำหรับการดำเนินการเปรียบเทียบช่วงต่างๆ ที่เราจะพูดถึงในภายหลังในโพสต์

การใช้สิ่งนี้ใน WP_Query จะทำให้เราได้รับอาร์เรย์ที่ยอดเยี่ยมสำหรับฟังก์ชั่นลูปเพื่อแสดงโพสต์ ในโพสต์นี้ เราจะพูดถึงฟังก์ชัน meta_query มากกว่าวิธีแสดงผลลัพธ์ WP_Query


โพสต์ข้อความค้นหาตามค่า Meta หลายค่า

หากคุณต้องการตรวจสอบค่าเมตาคีย์เทียบกับหลายค่า ควรใช้โอเปอเรเตอร์ "IN"

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value-multiple.php hosted with by GitHub

โพสต์ข้อความค้นหาด้วยคีย์ Meta หลายรายการ

ตอนนี้เราได้สอบถามโพสต์ด้วยเมตาคีย์เดียวแล้ว มาทำแบบเดียวกับหลายฟิลด์/คีย์ที่กำลังถูกสอบถาม วิธีนี้จะช่วยให้คุณค้นหาโพสต์ตามฟิลด์ที่กำหนดเองได้หลายฟิลด์ ตัวอย่างนี้รวมทั้งสองสิ่งที่เราทำข้างต้นโดยซ้อนคิวรีลงในอาร์เรย์และเพิ่ม 'ความสัมพันธ์' ลงใน meta_query

<?php
$ meta_query_args = array (
'meta_query' => array (
'relation' => 'AND' ,
array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
),
array (
'key' => 'featured_post' ,
'value' => true ,
'compare' => '='
)
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-meta-query-multiple-keys.php hosted with by GitHub

ฟิลด์ 'ความสัมพันธ์' สามารถตั้งค่าเป็น 'AND' หรือ 'OR' ได้ ดังนั้นคุณจึงสามารถกำหนดให้เป็นไปตามเงื่อนไขทั้งหมดหรือเพียงแค่เงื่อนไขเดียว


ตัวดำเนินการเปรียบเทียบ Meta Query

มีโอเปอเรเตอร์สองสามตัวที่จะเป็นประโยชน์ในการสอบถามโพสต์ของคุณโดยใช้ข้อความค้นหาเมตา ต่อไปนี้คือรายละเอียดโดยย่อของตัวดำเนินการเปรียบเทียบแต่ละรายการและวิธีใช้งาน

  • '=' ค้นหาคีย์เมตาที่เท่ากับค่าเมตา
  • '!=' ค้นหาคีย์เมตาที่ไม่เท่ากับค่าเมตา
  • '>' ค้นหาคีย์เมตาที่มากกว่าค่าเมตา
  • '>=' ค้นหาคีย์เมตาที่มากกว่า & เท่ากับค่าเมตา
  • '<' ค้นหาคีย์เมตาที่น้อยกว่าค่าเมตา
  • '<=' ค้นหาคีย์เมตาที่น้อยกว่า & เท่ากับค่าเมตา
  • 'LIKE' เคียวรีเมตาคีย์ที่มีคำ/วลี (เช่น เคียวรี “red” จะจับคู่กับวลี “Red”, “looksred” และ “redstyle”)
  • 'ไม่ชอบ' ตรงกันข้ามกับข้างบน
  • 'IN' ค้นหาคีย์เมตาที่มีค่าอยู่ในอาร์เรย์
  • 'NOT IN' เคียวรีเมตาคีย์ที่ไม่มีค่าอยู่ในอาร์เรย์
  • 'BETWEEN' สืบค้นเมตาคีย์โดยที่ค่าอยู่ระหว่างสองตัวเลข
  • 'NOT BETWEEN' ค้นหาคีย์เมตาโดยที่ค่าไม่อยู่ระหว่างสองตัวเลข
  • 'EXISTS' เคียวรีเมตาคีย์ที่มีค่าอยู่เลย
  • 'NOT EXISTS' เคียวรีเมตาคีย์ที่ไม่มีค่าอยู่เลย
  • 'REGEXP' ค้นหาคีย์เมตาตามนิพจน์ทั่วไป
  • 'ไม่ใช่ REGEXP' ตรงข้ามกับ REGEXP ด้านบน

วิธีจัดเรียงโพสต์ตามฟิลด์ Meta

แน่นอน WordPress ให้คุณจัดเรียงโพสต์โดยใช้ฟิลด์ที่คุณกำหนดเองได้โดยใช้ตัวเลือก 'orderby' ใน WP_Query คุณจะต้องตั้งค่า 'orderby' เป็น 'meta_value' จากนั้นตั้งค่า 'meta_key' เป็นชื่อฟิลด์ของคุณ ตามค่าเริ่มต้น วิธีนี้มีประโยชน์มากที่สุดเมื่อต้องการให้คิวรีของคุณแสดงผลตามตัวอักษรหรือเรียงลำดับตามตัวเลขเมื่อฟิลด์ของคุณเป็นตัวเลข

<?php
$ meta_query_args = array (
'post_type' => 'page' ,
'order' => 'ASC' ,
'meta_key' => 'city_name' ,
'orderby' => 'meta_value'
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-orderby-meta-query.php hosted with by GitHub