บทสารบัญ
บทสารบัญ

WP Query คลาสสำคัญสำหรับการคิวรี่บนเวิร์ดเพลส

WP Query คืออะไร ผมจะมาพารู้จักกันแบบหล่ะเอียดที่บทความนี้เลย สำหรับ WP_Query คือคลาสการคิวรี่หรือดึงข้อมูลของระบบเวิร์ดเพลส ที่ติดมากับตัวเวิร์ดเพลสเลย สำหรับผู้เขียนเว็บไซต์ด้วยเวิร์ดเพลส ถือว่าเป็นคลาสที่สำคัญจำเป็นต้องรู้ติดตัวเอาไว้เลยครับ

สำหรับบทความนี้ผมจะมาพารู้จัก WP Query สอนวิธีการใช้งานแบบละเอียด จากประสบการณ์ตรงเลยนะครับ เหมาะสมหรับบุคคลที่ต้องการศึกษาเรื่องระบบเวิร์ดเพลส และมีสกิลการพัฒนาธีมเวิร์ดเพลสพอประมาณนะครับ

เนื้อหาต่อยอด WP Query ได้ที่ก็จะมีเรื่องของการใช้ Arguments ทั้งหมดนี้จะเป็นชุดเดียวกันกับการใช้พวก get_posts นะครับ เดี๋ยวจะมีการสอนใช้งานอีกแน่นอนครับในบทต่อๆไป

การเปลี่ยนแปลงของคลาส WP Query

เวอร์ชั่นการเปลี่ยนแปลง WP Query
4.5.0ลบพร็อพเพอร์ตี้ $comments_popup
1.5.0เริ่มมีคลาส
ตารางการอัพเดทคลาส

ผมจะพยายามอัพเดทบทความตามเวอร์ชั่นของเวิร์ดเพลสนะครับถ้ามีการอัพเดทเวอร์ชั่นใหม่ๆ ผมจะมาอัพเดทบทความด้วยถ้ามีการเปลี่ยนแปลง

เวอร์ชั่นปัจจุบัน 5.4.1

WP Query วิธีการใช้งาน Loop

พื้นฐานการ loop query จาก Class WP_Query จะเริ่มจากการสร้าง Object Class แล้วก็เช็คว่ามีค่าไหม หลังจากนั้นก็ while loop ธรรมดาเลย ส่วนของบทความนี้ผมจะสอนสิ่งที่มากกว่า loop คือเราจะมาเจาะทุก พารามิเตอน์ที่รองรับกัน

// The Query
$the_query = new WP_Query( $args );
 
// The Loop
if ( $the_query->have_posts() ) :
    echo '<ul>';
    while ( $the_query->have_posts() ) :
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    endwhile;
    echo '</ul>';
else :
    // no posts found
endif;
/* Restore original Post Data */
wp_reset_postdata();

ส่วนสำคัญอยู่ที่ $args นั่นเองที่เราจะต้องใส่ อาเรย์ที่ต้องการสำหรับการดึงข้อมูล และนี่คือสิ่งที่ผมจะเขียนอธิบายทั้งหมดในบทความนี้ครับ

พารามิเตอร์ WP Query ทั้งหมด

ดึงโพสต์จากผู้เขียน( Author )

จะเป็นการดึงค่าตาม ผู้เขียน นะครับสำหรับพารามิเตอร์ที่รองรับจะมี 4 ตัวด้วยกัน คือ

  • author(int) -ไอดีของผู้เขียน ดึงโพสต์จากผู้เขียนแบบระบุคน
  • author_name(string) – ดึงโพสต์จากชื่อของผู้เขียนตามฟิลด์ nicename
  • author__in(array) – ไอดีของผู้เขียนดึงโพสต์จากผู้เขียนที่มากกว่า 1 คน
  • author__not_in(array) – ดึงแบบไม่ต้องการผู้เขียนตามไอดีที่ระบุ

ตัวอย่างการดึงโพสต์จากผู้เขียนในรูปแบบต่างๆ นะครับ

/*
 * ดึงโพสต์จากผู้เขียนโดยระบุไอดี
 * id author = 234
 * */
$query = new WP_Query([
	'author' => 123
]);

/*
 * ดึงโพสต์จากชื่อของผู้เขียน 'user_nicename'
 * author user_nicename = administrator
 * */
$query = new WP_Query([
	'author_name' => 'administrator'
]);

/*
 * ดึงโพสต์จากผู้เขียนหลายๆคน 
 * id authors = 3, 5, 9, 1, 11
 * */
$query = new WP_Query([
	'author' => '3, 5, 9, 1, 11'
]);

/*
 * ไม่ดึงโพสต์จากผู้เขียนที่ระบุ
 * id author = 190
 * */
$query = new WP_Query([
	'author' => -190
]);

/*
 * การดึงโพสต์จากหลายๆ คน
 * id authors = 3, 5, 9, 1, 11
 */
$query = new WP_Query([
	'author__in' => [3, 5, 9, 1, 11]
]);

/*
 * ไม่ดึงโพสต์จากหลายๆ คน
 * id authors = 3, 5, 9, 1, 11
 * */
$query = new WP_Query([
	'author__not_in' => [3, 5, 9, 1, 11]
]);

การดึงโพสต์ตามหมวดหมู่ ( Category )

WP Query ใช้เรื่องของการดึงหมวดหมู่เยอะมาก สำหรับข้อนี้อาจะต้องจำให้ขึ้นใจเลยนะครับ

  • cat (int) – เลขไอดีหมวดหมู่
  • category_name (string) – สลักของหมวดหมู่
  • category__and (array) – เลขไอดีของหมวดหมู่
  • category__in (array) – เลขไอดี
  • category__not_in (array) – เลขไอดี

ตัวอย่างการดึงโพสต์ตามหมวดหมู่ ในทุกรูปแบบ

/*
 * ดึงโพสต์จากเลขไอดีหมวดหมู่ ทั้งหมวดหมู่หลักและหมวดหมู่ย่อย
 * cat id = 8
 * */
$query = new WP_Query([
	'cat' => 8
]);

/*
 * ดึงโพสต์จากสลักหมวดหมู่ ทั้งหมวดหมู่หลักและหมวดหมู่ย่อย
 * cat slug = develop
 * */
$query = new WP_Query([
	'category_name' => 'develop'
]);

/*
 * ดึงโพสต์จากเลขไอดีหมวดหมู่ เฉพาะเลขหมวดหมู่ที่กำหนด
 * cat id = 8
 * */
$query = new WP_Query([
	'category__in' => 8
]);

/*
 * ดึงโพสต์จากเลขไอดีหมวดหมู่ แบบหลายหมวดหมู่
 * cat id = [4, 3, 7, 15]
 * */
$query = new WP_Query([
	'cat' => '4, 3, 7, 15'
]);

/*
 * ดึงโพสต์จากสลักหมวดหมู่ แบบหลายหมวดหมู่
 * cat slug = ['develop, 'wordpress']
 * */
$query = new WP_Query([
	'category_name' => 'develop, wordpress'
]);

/*
 * ดึงโพสต์จากสลักหมวดหมู่ เฉพาะโพสต์ที่อยู่ทั้งหมดในหมวดหมู่ที่กำหนด
 * cat slug = ['develop, 'wordpress']
 * จากตัวอย่างคือโพสต์ต้องอยู่ทั้งหมวดหมู่ develop และ หมวดหมู่ wordpress
 * */
$query = new WP_Query([
	'category_name' => 'develop+wordpress'
]);

/*
 * ดึงโพสต์ที่ไม่ได้อยู่ในเลขไอดีหมวดหมู่ที่กำหนด
 * cat id = [6, 7, 1, 9]
 * */
$query = new WP_Query([
	'cat' => '-6, -7, -1, -9'
]);

/*
 * ดึงโพสต์จากเลขไอดีหมวดหมู่ เฉพาะโพสต์ที่อยู่ทั้งหมดในหมวดหมู่ที่กำหนด
 * cat id = [4, 3, 7, 15]
 * จากตัวอย่างคือโพสต์ต้องอยู่ทั้งหมวดหมู่ 4, 3, 7, 15
 * */
$query = new WP_Query([
	'category__and' => [4, 3, 7, 15]
]);

/*
 * ดึงโพสต์จากเลขไอดีหมวดหมู่ เฉพาะโพสต์ที่อยู่ทั้งหมดในหมวดหมู่ที่กำหนด
 * cat id = [4, 3, 7, 15]
 * แต่จะไม่ดึงโพสต์ในหมวดหมู่ย่อยของเลขไอดีที่กำหนด
 * */
$query = new WP_Query([
	'category__in' => [4, 3, 7, 15]
]);

/*
 * ดึงโพสต์ที่ไม่ได้อยู่ในเลขไอดีหมวดหมู่ที่กำหนด 
 * cat id = [6, 7, 1, 9]
 * */
$query = new WP_Query([
	'category__not_in' => [6, 7, 1, 9]
]); 

การดึงโพสต์ตามเนื้อหาที่เกี่ยวข้อง (Tag)

  • tag (string) – การดึงโพสต์ตามแท็ก
  • tag_id (int) – ดึงโพสต์ตามแท็กไอดี
  • tag__and (array) – ดึงโพสต์ตามอาร์เรย์ของแท็ก
  • tag__in (array) – ดึงโพสต์ตามอาร์เรย์ของแท็ก
  • tag__not_in (array) – ดึงโพสต์ต
  • tag_slug__and (array) – ใช้สลักของแท็กในการดึงโพสต์ และโพสต์นั้นต้องมีทุกแท็กด้วย
  • tag_slug__in (array) – สลักของแท็กในการดึงโพสต์ และโพสต์นั้นต้องมีแท็กอย่างน้อยหนึ่งแท็กประกอบอยู่
/*
 * ดึงโพสต์ตามสลักของแท็ก  
 * tag = noodle
 * */
$query = new WP_Query([
	'tag' => 'noodle'
]);

/*
 * ดึงโพสต์ตามแท็กไอดี
 * tag_id = 54
 * */
$query = new WP_Query([
	'tag_id' => 54
]);

/*
 * ดึงโพสต์ที่อยู่ในแท็กที่กำหนดอย่างน้อยหนึ่งแท็ก
 * tag = ['php', 'wordpress']
 * */
$query = new WP_Query([
	'tag' => 'php,wordpress'
]);

/*
 * ดึงโพสต์ที่อยู่ในแท็กทั้งหมดที่กำหนด
 * tag = ['php', 'wordpress', 'website']
 * */
$query = new WP_Query([
	'tag' => 'php+wordpress+website'
]);

/*
 * ดึงโพสต์ที่อยู่ในแท็กของทั้งหมดที่เรากำหนดตามเลขไอดีของแท็ก
 * tag_ids = [20, 30, 50]
 * */
$query = new WP_Query([
	'tag__and' => [20, 30, 50]
]);

/*
 * ดึงโพสต์ที่อยู่ในแท็กที่เรากำหนดอย่างน้อย 1 แท็ก ตามเลขไอดีของแท็ก
 * tag_ids = [10, 8]
 * */
$query = new WP_Query([
	'tag__in' => [10, 8]
]);

/*
 * ดึงโพสต์ที่ไม่ได้อยู่ในแท็กที่กำหนดอย่างน้อย 1 แท็ก ตามเลขไอดี
 * tag_ids = [54, 20]
 * */
$query = new WP_Query([
	'tag__not_in' => [54, 20]
]);

การดึงโพสต์ตาม แท็กโซโนมี่ ( Taxonomy )

การใช้ WP Query จะมีเรื่องของ Taxonomies ด้วยผมไม่แน่ใจว่าในภาษาไทยให้คำว่า “แท็กโซโนมี่” ไว้ว่าอะไร ขออนุญาติทับศัพท์นะครับ

สำหรับแท็กโซโนมี่เป็นการใช้งาน คิวรี่ตามประเภทต่างๆ คล้ายๆกับ Archive นะครับ แต่จะเป็นประเภทที่เราสร้างขึ้นมาเอง สามารถใช้ตามการ register_taxonomy() เอาไว้ได้เลย

  • {tax} (string) – ดึงโพสต์ตาม taxonomy_slug ( เลิกใช้ที่ WordPress เวอร์ชั่น 3.1 และให้ใช้ tax_query แทน).
  • tax_query (array) – ดึงโพสต์ตามความสัมพันธ์ และเงื่อนไขต่างๆ จะดึงแบบอาร์เรย์ ( เริ่มใช้งานที่ WordPress ตั้งแต่เวอร์ชั่น 3.1 ).

relation (string) – เป็นการดึงโพสต์ตามเงื่อนไขต่างๆ แบบผูกกัน ยกตัวอย่างเช่น เมื่อ tax a = tax b เป็นต้น สามารถใช้ได้ใน taxonomy นะครับ และเงื่อนไขที่กำหนดสามารถที่จะใส่ได้มากกว่า 1 เงื่อนไขด้วย

  • taxonomy (string) – Taxonomy
  • field (string) – เป็นการใส่เงื่อนไขตาม ฟิลด์ของ Taxonomy ในฐานข้อมูล เช่น ‘term_id’, ‘name’, ‘slug’ หรือ ‘term_taxonomy_id’. ค่าเริ่มต้นจะใช้เป็น ‘term_id’
  • terms (int/string/array) – Taxonomy term(s). มากกว่า 1 ตัว
  • include_children (boolean) – เป็นการดึงโพสต์ย่อยใน Taxonomy ออกมาด้วยหรือไม่ ค่าเริ่มต้นคือ True
  • operator (string) – โอเปอร์เรเตอร์ที่สามารถใช้ได้ ‘IN’, ‘NOT IN’, ‘AND’, ‘EXISTS’ และ ‘NOT EXISTS’. ค่าเริ่มต้นคือ ‘IN’

สำหรับข้อนี้ความหมายของ โอเปอเรเตอร์ต่างๆ ทำงานคล้ายๆ กับ sql ของฐานข้อมูลเลยนะครับ ถ้ามีพื้นนิดหน่อยๆ น่าจะเข้าใจได้ไม่ยาก

ตัวอย่างที่ 1 ผมจะดึงโพสต์ตามเงื่อนไขด้านล่างนี้

  • ประเภทของโพสต์คือ posts
  • แท็กโซโนมี่คือ gamer
  • ดึงตามสลักที่ใช้คำว่า resident_evil_2
$args = [
    'post_type' => 'post',
    'tax_query' => [
        [
            'taxonomy' => 'gamer',
            'field'    => 'slug',
            'terms'    => 'resident_evil_2',
		],
	],
];
$query = new WP_Query( $args );

ตัวอย่างที่ 2 ผมจะดึงโพสต์จาก taxonomy แบบมีหลายเงื่อนไขนะครับ

  • ประเภทของโพสต์คือ game
  • แท็กโซโนมี่ที่หนึ่งคือ genre
  • ดึงตามสลักคือ horror
  • แท็กโซโนมี่ที่สองคือ company
  • ดึงตามสลักคือ capcom
$query = new WP_Query([
	'post_type' => 'game',
    'tax_query' => [
        'relation' => 'AND',
        [
            'taxonomy' => 'genre',
            'field'    => 'slug',
            'terms'    => [ 'horror' ],
        ],
        [
            'taxonomy' => 'company',
            'field'    => 'slug',
            'terms'    => [ 103, 115, 206 ],
            'operator' => 'capcom',
        ],
    ]
]);

การดึงโพสต์ตามการค้นหา ( Search )

s (string) – คือเวิร์ดที่ต้องการค้นหา

/*
 * วิธีการใช้งานดึงโพสต์ตามคีย์เวิร์ด
 * ตัวอย่าง keyword คือ movie
 * */
$query = new WP_Query([
	's' => 'movie' 
]);

การดึงโพสต์ตามฟิลด์ของโพสต์ หรือ เพจ ( Post, Page )

การใช้คิวรี่ประเภทของโพสต์ค่าพื้นฐานจะเริ่มต้นที่ posts เสมอทุกคิวรี่

  • p (int) – ดึงโพสต์ตามโพสต์ไอดี
  • name (string) – ดึงโพสต์ตามสลัก
  • page_id (int) – ดึงโพสต์ตามเพจไอดี
  • pagename (string) – ดึงโพสต์ตามเพจสลัก
  • post_parent (int) – เป็นการดึงโพสต์ตามโพสต์หลักใช้ในกรณีที่ต้องการดึงโพสต์ลูก โดยหาจากโพสต์แม่
  • post_parent__in (array) – เป็นการดึงโพสต์ลูก โดยหาจากโพสต์แม่เช่นกันเพียงแต่จะสามารถเพิ่มการหาจากโพสต์หลักได้มากกว่า 1 โพสต์ ( เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.6 )
  • post_parent__not_in (array) – เป็นการหาโพสต์ลูก เพียงแต่จะดึงโดยโพสต์แม่ต้องไม่อยู่ที่กำหนดมา ( เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.6 )
  • post__in (array) – เป็นการดึงโพสต์ตามเลขไอดีแต่สามารถดึงได้มากกว่า 1 เลข
  • post__not_in (array) – เป็นการดึงโพสต์ที่ไม่อยู่ในเลขโพสต์ไอดีที่กำหนด
  • post_name__in (array) – เป็นการดึงโพสต์ตามสลัก สามารถใส่ได้มากกว่า 1 สลัก ( เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 4.4 )
/*
 * ดึงโพสต์ตามเลขโพสต์ไอดี
 * post_id = 5
 * */
$query = new WP_Query([ 
	'p' => 5 
]);

/*
 * ดึงเพจตามเลขเพจไอดี
 * page_id = 6
 * */
$query = new WP_Query([
	'page_id' => 6
]);

/*
 * ดึงโพสต์ตามสลัก
 * slug = wordpress-wp-query
 * */
$query = new WP_Query([
	'name' => 'wordpress-wp-query'
]);

/*
 * ดึงเพจตามสลัก
 * slug = contact
 * */
$query = new WP_Query([
	'pagename' => 'contact'
]);

/*
 * ดึงเพจลูกตามสลัก
 * slug = contact/bangkok
 * */
$query = new WP_Query([
	'pagename' => 'contact/bangkok'
]);

/*
 * ดึงโพสต์ตามโพสต์แม่
 * post_parent = 50
 * */
$query = new WP_Query([
	'post_parent' => 50
]);

/*
 * ดึงโพสต์แม่สูงสุดทั้งหมด
 * post_parent = 0 หมายถึงไม่มีโพสต์ ตัวโพสต์เองที่เป็นโพสต์หลัก
 * */
$query = new WP_Query([
	'post_parent' => 0
]);

/*
 * ดึงโพสต์ตามโพสต์แม่ แบบหลายโพสต์
 * post_parent = [10, 20, 30]
 * */
$query = new WP_Query([
	'post_parent__in' => [10, 20, 30]
]);

/*
 * ดึงโพสต์ตามประเภทของโพสต์ และกำหนดให้ดึงโพสต์ตามเลขไอดี
 * post_type = page
 * post_id = [10, 20, 30]
 * */
$query = new WP_Query([
	'post_type' => 'page', 
	'post__in' => [10, 20, 30]
]);

/*
 * ดึงโพสต์ตามประเภทของโพสต์ และกำหนดให้ยกเว็นตามเลขไอดีที่กำหนด
 * post_type = post
 * post_id = [10, 20, 30]
 * */
$query = new WP_Query([
	'post_type' => 'post', 
	'post__not_in' => [10, 20, 30]
]);

การดึงโพสต์ตาม โพสต์ที่ต้องใช้รหัสในการเข้าชม ( Password )

จะมี 2 พารามิเตอร์เป็นหลัก ใช้สำหรับคิวรี่โพสต์ที่มีการเซ็ทใส่รหัสผ่านไว้

  • has_password (bool) – รับพารามิเตอร์เป็น True กับ False สำหรับ True คือดึงโพสต์ที่มีรหัสผ่าน และ False สำหรับโพสต์ที่ไม่ได้กำหนดรหัสผ่าน( เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.9 ).
  • post_password (string) – รับพารามิเตอร์เป็นสตริง เป็นการดึงโพสต์ที่ใช้รหัสผ่านที่ท่านกำหนดไว้ออกมา ( เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.9 )
/*
 * ตัวอย่างการดึงโพสต์ที่มีการใส่รหัสผ่านไว้
 * */
$query = new WP_Query([
	'has_password' => true
]);

/*
 * ตัวอย่างการดึงโพสต์ที่ไม่ได้ใส่รหัสผ่าน
 * */
$query = new WP_Query([
	'has_password' => false
]);

/*
 * ตัวอย่างการดึงโพสต์ที่มีไม่ได้ใส่รหัสผ่าน และไม่ได้เซ็ทรหัสผ่านไว้เลย
 * */
$query = new WP_Query([
	'has_password' => null
]);

/*
 * ตัวอย่างการดึงโพสต์ที่ใช้รหัสผ่านตามที่กำหนด
 * password = '[email protected]'
 * */
$query = new WP_Query([
	'post_password' => '[email protected]'
]);

วิธีการดึงโพสต์ตามประเภทของโพสต์ ( Post type )

ซึ่งจะมีพารามิเตอร์เพียงตัวเดียว แต่ประเภทของโพสต์มีหลายแบบด้วยกัน

  • post_type (string / array) – รับค่าเป็น สตริงหรืออาร์เรย์ ค่าปกติจะเป็น posts

สำหรับประเภทของโพสต์ที่มีในระบบของเวิร์ดเพลส ผมจะแยกเป็นแต่หล่ะประเภทมาให้ดังนี้

  • post ประเภทของโพสต์ทั่วไป
  • page ประเภทของหน้าเพจ
  • revision ประเภทตัวสำรองโพสต์ เวลาที่เราเขียนโพสต์จะมีการสำรองข้อมูลตอนเขียนเป็นรอบๆ ประเภทนี้คือ revision
  • attachment เป็นประเภทของ มีเดีย ภาพ
  • nav_menu_item ประเภทของเมนู เวลาที่เราสร้างเมนูที่ระบบหลังบ้านและใส่ลิงค์แต่หล่ะลิงค์จะถูกเซฟเป็นประเภท nav_menu_item
  • any คือประเภทพิเศษ เวลาที่เราสร้างประเภทขึ้นมาใหม่ การคิวรี่จะสามารถเรียกใช้ประเภทนั้นๆ ได้เลย ผูกกับฟังก์ชั่น register_post_type()
/*
 * การดึงโพสต์ประเภทของเพจ
 * */
$query = new WP_Query([
	'post_type' => 'page'
]);

/*
 * การดึงโพสต์ทุกประเภท 
 * */
$query = new WP_Query([
	'post_type' => 'any'
]);

/*
 * ตัวอย่างการดึงโพสต์แบบหลายประเภท และประเภทที่เราสร้างใหม่ด้วย
 * จากตัวอย่างนี้เราสร้าง movie, book ขึ้นมาใหม่
 * */
$query = new WP_Query([
	'post_type' => [ 'post', 'page', 'movie', 'book' ]
]);

การดึงโพสต์ตามสถานะ ( Status )

สำหรับการดึงโพสต์ตามสถานะ จะมีพารามิเตอร์เพียงตัวเดียว แต่จะมีสถานะอยู่หลายสถานะด้วยกัน

  • post_status (string / array) – รับค่าเป็น สตริงหรืออาร์เรย์ ค่าพื้นฐานคือ publish

สถานะทั้งหมดของระบบเวิร์ดเพลส

  • publish บทความที่เผยแพร่
  • pending บทความรอการเผยแพร่
  • draft บทความที่ยังเขียนไม่เสร็จ หรือยังไม่เผยแพร่
  • auto-draft บทความสร้างใหม่ที่ยังไม่มีเนื้อหา
  • future โพสต์ที่ตั้งเวลาไว้
  • private โพสต์ที่จะแสดงผลกับคนที่เข้าสู่ระบบเท่านั้น
  • inherit สถานะของโพสต์ที่เป็น ประเภท Revision
  • trash โพสต์ในถังขยะ
  • any สถานะทั้งหมด
/*
 * ตัวอย่างการดึงโพสต์ที่มีสถานะเป็น draft
 * */
$query = new WP_Query([
	'post_status' => 'draft'
]);

/*
 * ตัวอย่างการดึงโพสต์แบบมีหลายสถานะ
 * */
$query = new WP_Query([
	'post_status' => ['pending', 'draft', 'future']
]);

/*
 * ตัวอย่างการดึงโพสต์สถานะ พร้อมกับดึงตามประเภท
 * ดึงสถานะ any
 * ดึงประเภท attachment
 * */
$query = new WP_Query([
	'post_status' => 'any',
    'post_type' => 'attachment'
]);

การดึงโพสต์ตามจำนวนการแสดงความคิดเห็น ( Comment )

  • comment_count (int) – ถ้าใส่ Value เป็น Int จะเป็นการหมายถึงว่าเราต้องการใช้เครื่องหมายเท่ากับในการดึงโพสต์
  • comment_count (Array) – ถ้าใส่ค่าเป็น อาร์เรย์เป็นการหมายถึงว่าเราต้องการใช้เครื่องหมายอื่นๆ สำหรับเครื่องหมายอื่นๆ ที่สามารถใช้ได้จะมี =, !=, <= , >= สำหรับค่าเริ่มต้นคือ =
/* 
 * ตัวอย่างการดึงแบบใช้ Int
 * ต้องการดึงโพสต์ประเภท โพสต์
 * ต้องการดึงโพสต์ที่มีจำนวนคอมเม้น 20 คอมเม้น
 * */
$query = new WP_Query([
	'post_type' => 'post',
    'comment_count' => 20,
]);

/* 
 * ตัวอย่างการดึงแบบใช้ Array
 * ต้องการดึงโพสต์ประเภท โพสต์
 * ต้องการดึงโพสต์ที่มีจำนวนคอมเม้น ที่มากกว่าหรือเท่ากับ 25 ขึ้นไป
 * */
$query = new WP_Query([
    'post_type' => 'post',
    'comment_count' => [
        'value' => 25,
        'compare' => '&gt;=',
    ]
]);

การดึงโพสต์แบบกำหนดจำนวน ( Pagination )

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

  • nopaging (boolean) – รับค่าเป็นบูลีน True/ False ถ้า True หมายถึงดึงโพสต์ทั้งหมดแบบไม่แบ่งหน้า ถ้า False คือดึงแบบปกติ
  • posts_per_page (int) – รับค่าตัวเป็นเลข ค่าที่ส่งมาจะหมายถึงจำนวนที่เราต้องการจะดึงโพสต์ในคิวรี่นี้นั่นเอง number of post to show per page ( เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 2.1 ). หรือถ้าใส่ค่าเป็น -1 หมายถึงดึงโพสต์ทั้งหมดในเงื่อนไขนี้
  • posts_per_archive_page (int) – รับค่าเป็นตัวเลข เหมือนกับ posts_per_page เลยเพียงแต่ posts_per_archive_page จะสามารถใช้ได้เฉพาะในหน้า archive เท่านั้น
  • offset (int) – เป็นตัวกำหนดว่าเราจะเริ่มดึงโพสต์ที่ตำแหน่งอะไร ข้อควรระวังคือ offset จะใช้ไม่ได้หากเรากำหนด posts_per_page เป็น -1 นั่นหมายถึงมันจะดึงโพสต์ทั้งนั่นเอง
  • paged (int) – ดึงโพสต์ตามหน้าของ Page สมมติว่าจำนวนโพสต์ของเรา มี 20 โพสต์ แบ่งหน้าหล่ะ 10 โพสต์ จำมี เพจ 2 หน้า เราเลือกได้ว่าจะให้หน้าไหนออกมาโชว์
  • page (int) – เหมือนกับการดึงของ Paged เพียงแต่ option นี้จะดึงได้ที่หน้าแรก
  • ignore_sticky_posts (boolean) – เป็นการดึงโพสต์ที่ไม่ใช่ Sticky Posts หรือโพสต์ปักหมุดนั่นเอง ค่าเริ่มต้นคือ False (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.1)
/*
*	สมมติให้ดึงทีหล่ะ 3 โพสต์ 
* */
$query = new WP_Query([
   'posts_per_page' => 3 
]);

/*
*	สมมติให้ดึงโพสต์ทั้งหมด
* */
$query = new WP_Query([
   'posts_per_page' => -1
]);

/*
*	สมมติให้ดึงโพสต์ทั้งหมดแบบไม่แบ่งหน้า
* */
$query = new WP_Query([
   'nopaging' => true
]);

/*
*	สมมติให้ดึงโพสต์เริ่มจากโพสต์ที่ 4
* */
$query = new WP_Query([
   'offset' => 3
]);

/*
*	สมมติให้ดึงโพสต์ทั้งหมดตามเงื่อนไขว่า
   จำนวน 5 โพสต์
   เริ่มที่ตำแหน่งที่ 4
* */
$query = new WP_Query([
   'posts_per_page' => 5, 
   'offset' => 3
]);

/*
*	สมมติให้ดึงหน้าที่ 6
* */
$query = new WP_Query([
   'paged' => 6
]);

/*
*	สมมติให้ดึงหน้า ตามหน้าปัจจุบัน
*	get_query_var() เป็นการดึง variable global ของ WordPress ในที่นี้เรียกหา var paged
* */
$query = new WP_Query([
   'paged' => get_query_var( 'paged' )
]);

/*
*	สมมติให้ดึงหน้า ตามหน้าปัจจุบัน
*	check var paged ก่อนว่ามีการเซ็ทมาไหม 
*	เช่นหน้าที่ 1 จะไม่มี var paged
* */
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query([
   'paged' => $paged
]);

/*
*	ดึงโพสต์ Stricky
*	get_option('sticky_posts') จะเป็นการดึงโพสต์ที่เป็นโพสต์ ปักหมุดออกมา (sticky posts)
* */
$sticky = get_option( 'sticky_posts' );
$query = new WP_Query([
   'p' => $sticky[0]
]);

/*
*	ดึงโพสต์หลายเงื่อนไขคือ
*	ดึงจำนวน 1 โพสต์
*	ดึงโพสต์ที่อยู่ใน sticky_posts
*	ยกเว้น sticky_posts
*	ตัวอย่างนี้จะเป็นการบอกว่าถ้าดึงโพสต์ปักหมุดไม่เจอ จะกลายเป็นดึงโพสต์ล่าสุดออกมา
* */
$query = new WP_Query([
   'posts_per_page' => 1,
   'post__in' => get_option( 'sticky_posts' ),
   'ignore_sticky_posts' => 1,
]);
if ( $sticky[0] ) :
   // insert here your stuff...
endif;

/*
*	ดึงโพสต์ออกมาแบบไม่เอาโพสต์ปักหมุด
* */
$query = new WP_Query([
   'post__not_in' => get_option( 'sticky_posts' ) 
]);

/*
*	ดึงโพสต์ออกมาแบบไม่เอาโพสต์ปักหมุด
*	ดึง 3 โพสต์
*	ดึงจากหมวดหมู่ไอดีที่ 6
* */
$query = new WP_Query([
   'ignore_sticky_posts' => 1, 
   'posts_per_page' => 3, 
   'cat' => 6
]);

/*
*	ดึงโพสต์ออกมาแบบไม่เอาโพสต์ปักหมุด
*	ดึงโพสต์จากหมวดหมู่ไอดีที่ 3
*	ดึงโพสต์ที่ไมได้อยู่ใน sticky posts
*	ดึงโพสต์ในหน้าปัจจุบัน
* */
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$sticky = get_option( 'sticky_posts' );
$args = array(
   'cat' => 3,
   'ignore_sticky_posts' => 1,
   'post__not_in' => $sticky,
   'paged' => $paged,
);
$query = new WP_Query( $args );

การเรียงลำดับโพสต์ที่ดึงออกมา ( Order & Orderby )

จะเป็นพารามิเตอร์สำหรับเรียง ถ้าเป็น sql คือการ sort asc, desc นั่นเองเพียงแต่การ orderby ของ wp_query ค่อนข้างมี ออฟชั่นเยอะพอสมควรมาดูกันครับ

  • order (string | array) – สำหรับ order จะเป็นการเรียงลำดับแบบธรรมดาเลยคือ asc เรียงจาก น้อยไปมาก, desc เรียงลำดับจาก มากไปน้อย อันนี้คือรับค่าแบบ String ธรรมดาและมีค่าพื้นฐานเป็น desc ถ้าต้องการเรียงจาก field 1, field 2 ก็สามารถทำได้ ให้ใส่แบบอาเรย์เข้าไป
  • orderby (string | array) – ตรงนี้จะเป็นการบอกว่าจะให้เรียงจาก ฟิลด์อะไรนะครับ ค่อนข้างจะมี ออฟชั่นเยอะเลย ผมจะลิสต์ให้ด้านล่าง ค่าเริ่มต้น คือ post_date หรือเวลาที่เขียนบทความ นะครับ
/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	ดึงตามหัวข้อ
 *	เรียงลำดับจากมากไปน้อย
 * */
$query = new WP_Query([
	'orderby' => 'title',
    'order' => 'DESC',
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	ดึงตามลำดับ menu_order, title
 *	เรียงลำดับจากมากไปน้อย
 * */
$query = new WP_Query([
	'orderby' => 'menu_order title',
    'order' => 'DESC',
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	ดึงตามลำดับ menu_order, title
 *	เรียงลำดับจากมากไปน้อย
 * */
$query = new WP_Query([
	'orderby' => 'rand',
    'posts_per_page' => '1',
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	ดึงตามลำดับ menu_order, title
 *	เรียงลำดับจากมากไปน้อย
 * */
$query = new WP_Query([
	'orderby' => 'comment_count'
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	ดึงตามลำดับ menu_order, title
 *	เรียงลำดับจากมากไปน้อย
 * */
$query = new WP_Query([
	'post_type' => 'product',
    'orderby' => 'meta_value_num',
    'meta_key' => 'price',
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	ดึงตามลำดับ menu_order, title
 *	เรียงลำดับจากมากไปน้อย
 * */
$query = new WP_Query([
	'post_type' => 'page',
    'orderby' => 'title menu_order',
    'order' => 'ASC',
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์
 *	หัวข้อ มากไปน้อย
 *	menu_order น้อยไปมาก
 * */
$query = new WP_Query([
	'orderby' => [
		'title' => 'DESC', 
		'menu_order' => 'ASC'
	]
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์ตาม meta_ky
 *	meta_key = age
 *	เรียงลำดับแบบ meta_value_num มากไปน้อย
 *	หัวข้อ น้อยไปมาก
 * */
$query = new WP_Query([
	'meta_key' => 'age',
	'orderby' => [
		'meta_value_num' => 'DESC', 
		'title' => 'ASC'
	]
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์ตามคีย์และ meta_query
 *	เรียงลำดับตามประเภทของโพสต์ my_custom_post_type
 *	meta_key = age, 
 *	order = น้อยไปมาก
 *	orderby = meta_value_num
 *	meta_query key = age, value [3, 4], Operator IN
 * */
$query = new WP_Query([
	'post_type'  => 'my_custom_post_type',
    'meta_key' => 'age',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
    'meta_query' => [
        [
            'key' => 'age',
            'value' => [ 3, 4 ],
            'compare' => 'IN',
		],
	],
]);

/*
 *	ตัวอย่างการเรียงลำดับโพสต์ตาม meta_query
 *	orderby = น้อยไปมาก
 *	state_clause = มากไปน้อย
 *	meta_query เงื่อนไขคือ and
 *	state_clause , key = state, value = Wisconsin
 *	city_clause , key = city, operator ต้องมีค่า (EXISTS)
 *	เรียงลำดับจากมากไปน้อย
 * */
$q = new WP_Query([
    'meta_query' => [
        'relation' => 'and',
        'state_clause' => [
            'key' => 'state',
            'value' => 'Wisconsin',
        ],
        'city_clause' => [
            'key' => 'city',
            'compare' => 'EXISTS',
        ], 
    ],
    'orderby' => [ 
        'city_clause' => 'ASC',
        'state_clause' => 'DESC',
    ],
]);
  • none – ไม่เรียงลำดับ (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 2.8).
  • ID – เรียงตาม โพสต์ไอดี
  • author – เรียงตามผู้เขียน
  • title – เรียงตามหัวข้อ
  • name – เรียงตามสลัก
  • type – เรียงตามประเภทของโพสต์ (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 4.0)
  • date – เรียงตามวันเวลาที่เผยแพร่
  • modified – เรียงตามวันเวลาที่แก้ไข
  • parent – เรียงตามโพสต์แม่
  • rand – สุ่ม
  • comment_count – เรีงตามจำนวนการแสดงความคิดเห็น (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 2.9)
  • relevance – เรียงตามการค้นหา
  • menu_order – เรียงตามเมนู
  • meta_value – อันนี้จะเป็นการเรียงตามเงื่อนไขของ post_meta หรือ meta_value
  • meta_value_num – เรียงตามไทป์ค่า numeric. สามารถใช้การกำหนด meta_type ได้ส่วนค่าที่ใช้ได้จะมี ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’
  • post__in – เรียงตามโพสต์ที่กำหนด (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.5)
  • post_name__in – เรียงตามโพสต์ที่กำหนด โดยดูจาก สลัก (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 4.0)
  • post_parent__in – เรียงตามโพสต์แม่(เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 4.6)

การเรียงลำดับตามวันที่ ( Date )

  • year (int) – ดึงโพสต์ตามปี ต้องกำหนดเป็น ตัวเลข 4 ตัวนะครับเช่น 2020
  • monthnum (int) – ดึงโพสต์ตามเลขของเดือน 1-12
  • w (int) – ดึงโพสต์ตามเลขสัปดาห์ของปี 0-53
  • day (int) – ดึงโพสต์ตามวันที่ 1-31
  • hour (int) – ดึงโพสต์ตามชั่วโมง 0 – 23
  • minute (int) – ดึงโพสต์ตามนาที 0-60
  • second (int) – ดึงโพสต์ตามวินาที 0-60
  • m (int) – ดึงโพสต์ตามปีและเดือน (For e.g.: 201307)
  • date_query (array) – ดึงโพสต์ตามเงื่อนไข เดี๋ยวจะมาพาดูกันทีหล่ะออฟชั่นนะครับ (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.7)

เงื่อนไขการใช้ date_query จะสามารถสร้างเงื่อนไขการดึงโพสต์เวลาเป็น sub query อีกทีเงือนไขสามารถใช้กับ tag ด้านบนได้ทั้งหมดมีเพิ่มเติมดังนี้

  • after (string/array) – เป็นการดึงโพสต์ตามหลังจาก ปี เดือน วัน สำหรับเงื่อนไขที่รองรับคืออาร์เรย์แบบ ปี, เดือน, วัน
  • before (string/array) -เป็นการดึงโพสต์ก่อนจาก ปี เดือน วัน สำหรับเงื่อนไขที่รองรับคืออาร์เรย์แบบ ปี, เดือน, วัน
  • inclusive (boolean) – สำหรับ after, before เอาไว้เช็คการคิวรี่โพสต์
  • compare (string) – การเปรียบเทียบคิวรี่
  • column (string) – การกำหนดคอลัมน์ที่เราจะเอาไปเข้าเงื่อนไข
  • relation (string) – เป็นการเชื่อมเงื่อนไข รองรับ ทั้งหมด ( and ), อย่างใดอย่างหนึ่ง ( or )
/*
 * ตัวอย่างการดึงโพสต์ตามปีเดือนวัน
 * วิธีที่ 1
 * */
$query = new WP_Query( 'year=2012&monthnum=12&day=12' );

/*
 * วิธีที่ 2
 * */
$query = new WP_Query([
	'date_query' => [
        [
            'year'  => 2012,
            'month' => 12,
            'day'   => 12,
		],
	]
]);

/*
 * ตัวอย่างการดึงโพสต์ตามปีตามเลขเดือนและวัน
 * วิธีที่ 1
 * */
$today = getdate();
$query = new WP_Query( 'year=' . $today['year'] . '&monthnum=' . $today['mon'] . '&day=' . $today['mday'] );

/*
 * วิธีที่ 2
 * */
$today = getdate();
$query = new WP_Query([
	'date_query' => [
        [
            'year' => $today['year'],
            'month' => $today['mon'],
            'day' => $today['mday'],
        ],
    ]
]);

/*
 * ตัวอย่างการดึงโพสต์ตามปีและสัปดาห์
 * วิธีที่ 1
 * */
$week = date( 'W' );
$year = date( 'Y' );
$query = new WP_Query( 'year=' . $year . '&w=' . $week );

/*
 * วิธีที่ 2
 * */
$query = new WP_Query([
	'date_query' => [
        [
            'year' => date( 'Y' ),
            'week' => date( 'W' ),
        ],
    ]
]);

/*
 * ตัวการดึงโพสต์แบบมีหลายเงื่อนไข
 * ชั่วโมงมากกว่า 9 แต่น้อยกว่า 7
 * อยู่ระหว่างวันที่ 2, 6
 * */
$query = new WP_Query([
	'date_query' => [
        [
            'hour'      => 9,
            'compare'   => '>=',
        ], [
            'hour'      => 17,
            'compare'   => '<=',
        ], [
            'dayofweek' => [ 2, 6 ],
            'compare'   => 'BETWEEN',
        ],
    ],
    'posts_per_page' => -1,
]);

/*
 * ตัวการดึงโพสต์แบบระหว่างช่วง
 * คือ ก่อนวันที่ 28 ก.พ. 2013 
 * และหลังวันที่ 1 ม.ค. 2013
 * โดยดึงทั้งหมด
 * */
$query = new WP_Query([
	'date_query' => [
        [
            'after'     => 'January 1st, 2013',
            'before'    => [
                'year'  => 2013,
                'month' => 2,
                'day'   => 28,
			],
            'inclusive' => true,
		],
	],
    'posts_per_page' => -1,
]);

/*
 * ตัวการดึงโพสต์แบบระหว่างช่วง
 * คือ post_date_gmt หรือโพสท์ที่เผยแพร่ก่อนหน้า 1 ปี
 * และหลัง post_modified_gmt หรือ โพสต์ที่แก้ไข 1 เดือนหลังจากนั้น
 * โดยดึงทั้งหมด
 * */
$query = new WP_Query([
	'date_query' => array(
        array(
            'column' => 'post_date_gmt',
            'before' => '1 year ago',
        ),
        array(
            'column' => 'post_modified_gmt',
            'after'  => '1 month ago',
        ),
    ),
    'posts_per_page' => -1,
]);

การดึงโพสต์ตาม โพสต์เมต้า ( Post meta / Custom field)

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

  • meta_key (string) – คีย์ที่เราจะใช้เป็น สตริง
  • meta_value (string) – value ที่เราจะใช้ เป็น สตริง
  • meta_value_num (number) – value ที่เราจะใช้ เป็น ตัวเลข
  • meta_compare (string) – การเปรียบเทยบค่าซึ่งโอเปอรเตอร์ทั้งหมดที่เราจะใช้ได้คือ =, !=, >, >=, <, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, NOT BETWEEN, NOT EXISTS, REGEXP, NOT REGEXP หรือ RLIKE ค่าเริ่มต้นคือ =
  • meta_query (array) – การคิวรี่ผ่าน post_meta, custom field (เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.1).
  • relation (string) – เป็นการเชื่อมเงื่อนไขที่เราจะใส่เข้าไปนะครับ จะมี and และ or ครับ

สำหรับ meta_query ของการคิวรี่ดึงโพสต์ตามโพสต์เมต้าจะมี พารามิเตอร์ตามลิสด้านล่างนี้ครับ

  • key (string) – คัสตอมฟิลด์คีย์ รับค่าเป็นสตริง
  • value (string|array) – คัสตอมฟิลด์แวลู รับค่าเป็น อาร์เรย์ ส่วนโอเปอเรเตอร์ ที่สามารถใช้ได้คือ ‘IN’, ‘NOT IN’, ‘BETWEEN’, or ‘NOT BETWEEN’. เริ่มใช้ได้ตั้งแต่ WordPress เวอร์ชั่น 3.9 ขึ้นไป
  • compare (string) – ตัวเปรียบเทียบค่าของเราจะมีโอเปอเรเตอร์ที่สามารถใช้ได้คือ =, !=, >, >=, <, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, NOT BETWEEN, EXISTS and NOT EXISTS ค่าเริ่มต้นคือ =
  • type (string) – คัสตอมฟิลด์สำหรับการดึงค่าตามประเภท จะมีประเภทที่ใช้ได้คือ NUMERIC, BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED ค่าเริ่มต้นคือ CHAR
/*
* key = color
* */
$query = new WP_Query([
	'meta_key' => 'color'
]);

/*
* value = blue
* */
$query = new WP_Query([
	'meta_value' => 'blue'
]);

/*
* post_type = page
* value = blue
* */
$query = new WP_Query([
	'meta_value' => 'blue',
	'post_type'  => 'page'
]);

/*
* key = color
* value = blue
* */
$query = new WP_Query([
	'meta_key'   => 'color',
	'meta_value' => 'blue'
]);

/*
* ดึงโพสต์ตามการเปรียบเทียบเงื่อนไข
* operator = !=
* key = color
* value = blue
* */
$query = new WP_Query([
	'meta_key'     => 'color',
	'meta_value'   => 'blue',
	'meta_compare' => '!='
]);

/*
* ดึงโพสต์ตามการเปรียบเทียบเงื่อนไข
* post_type = event
* operator = >
* key = event_date
* value = date( "Ymd" )
* */
$query = new WP_Query([
	'post_type' => 'event',
	'meta_key' => 'event_date',
	'meta_value' => date( "Ymd" ), // change to how "event date" is stored
	'meta_compare' => '>',
]);

/*
* ดึงโพสต์ตามการเปรียบเทียบเงื่อนไข
* post_type = product
* operator = <=
 * key = price
 * value = 22
 * */
$query = new WP_Query([
	'meta_key' => 'price',
	'meta_value' => '22',
	'meta_compare' => '<=',
	'post_type' => 'product'
]);

/*
* ดึงโพสต์ตาม value
* */
$query = new WP_Query([
	'meta_value' => '_wp_zero_value'
]);

/*
* ดึงโพสต์ตามการเปรียบเทียบเงื่อนไข
* post_type = product
* operator = ไม่เหมือนกับ
* key = color
* value = blue
* */
$query = new WP_Query([
	'post_type'  => 'product',
	'meta_query' => [
		[
			'key'     => 'color',
			'value'   => 'blue',
			'compare' => 'NOT LIKE',
		],
	]
]);

/*
* ดึงโพสต์ตามการเปรียบเทียบเงื่อนไขมากกว่า 1 เงื่อนไข
* post_type = product
* เงื่อนไขแรก
* operator = ไม่เหมือนกับ
* key = color
* value = blue
* เงื่อนไขที่สอง
* operator = ระหว่าง
* type = เป็นตัวเลข
* value = 20, 100
* */
$query = new WP_Query([
	'post_type'  => 'product',
		'meta_query' => [
		[
			'key'     => 'color',
			'value'   => 'blue',
			'compare' => 'NOT LIKE',
		], [
			'key' => 'price',
			'value'   => [ 20, 100 ],
			'type'    => 'numeric',
			'compare' => 'BETWEEN',
		],
	],
]);

/*
* ดึงโพสต์ตามการเชื่อมเงื่อนไข
* post_type = product
* เงื่อนไข = or อย่างใดอย่างหนึ่ง
* เงื่อนไขแรก
* operator = ไม่เหมือนกับ
* key = color
* value = blue
* เงื่อนไขที่สอง
* operator = ระหว่าง
* type = เป็นตัวเลข
* value = 20, 100
* */
$query = new WP_Query([
	'post_type'  => 'product',
	'meta_query' => [
		'relation' => 'OR',
		[
			'key'     => 'color',
			'value'   => 'blue',
			'compare' => 'NOT LIKE',
		], [
			'key'     => 'price',
			'value'   => [ 20, 100 ],
			'type'    => 'numeric',
			'compare' => 'BETWEEN',
		],
	],
]);

/*
* ดึงโพสต์ตามการเชื่อมเงื่อนไขและมีเงื่อขไขซ้อน
* post_type = product
* เงื่อนไข = or อย่างใดอย่างหนึ่ง
* เงื่อนไขแรก
* operator = เท่ากับ
* key = color
* value = orange
* เงื่อนไขย่อย ต้องมีค่าทั้งสองอย่าง and
* เงื่อนไขที่ 1
* operator = เท่ากับ
* key = color
* value = red
* เงื่อนไขที่ 2
* operator = เท่ากับ
* key = size
* value = small
* */
$query = new WP_Query([
	'post_type'  => 'product',
		'meta_query' => [
			'relation' => 'OR',
			[
				'key'     => 'color',
				'value'   => 'orange',
				'compare' => '=',
			], [
				'relation' => 'AND',
			[
				'key' => 'color',
				'value' => 'red',
				'compare' => '=',
			], [
				'key' => 'size',
				'value' => 'small',
				'compare' => '=',
			],
		],
	],
]);

การดึงโพสต์ตามสิทธ์ ( Permission )

perm (string) – สิทธ์ของ ยูสเซอร์

/*
 * ตัวอย่างการดึงโพสต์สถานะเป็น เผยแพร่, ซ่อน
 * สิทธ์ คือ สามารถเข้าไปอ่านได้
 * */
$query = new WP_Query([
	'post_status' => [
		'publish', 'private'
	],
    'perm' => 'readable',
]);

การดึงโพสต์ตามมีมไทป์ ( Mime Type )

post_mime_type (string/array) – มีมไทป์คือพวกภาพต่างๆ ที่เราอัพโหลดมา รับค่าเป็น สตริงสำหรับประเภทเดียว หรืออาร์เรย์สำหรับหลายประเภท

/*
 * ดึงโพสประเภทภาพ 
 * สถานะเป็น inherit
 * ประเภท gif
 * */
$query = new WP_Query([
	'post_type' => 'attachment',
    'post_status' => 'inherit',
    'post_mime_type' => 'image/gif',
]);

การดึงโพสต์แบบจัดการแคช ( Caching )

  • cache_results (boolean) – รับค่าเป็นบูลีน สำหรับเช็คว่าต้องการให้บันทึกแคชโพสต์ไหม
  • update_post_meta_cache (boolean) – รับค่าเป็นบูลีน สำหรับเช็คว่าต้องการให้บันทึกแคชโพสต์เมต้า / คัสตอมฟิลด์ ไหม
  • update_post_term_cache (boolean) – รับค่าเป็นบูลีน สำหรับเช็คว่าต้องการให้บันทึกแคชเทิร์มไหม
/*
 * ตัวอย่างจัดการแคช 
 * ดึงล่าสุด 50 โพสต์
 * ไม่ต้องบันทึกลงโพสต์แคช
 * */
$query = new WP_Query([
	'posts_per_page' => 50,
    'cache_results' => false
]);

/*
 * ตัวอย่างจัดการแคช 
 * ดึงล่าสุด 50 โพสต์
 * ไม่ต้องบันทึกลงโพสต์เมต้าแคช
 * */
$query = new WP_Query([
	'posts_per_page' => 50,
    'update_post_meta_cache' => false
]);

/*
 * ตัวอย่างจัดการแคช 
 * ดึงล่าสุด 50 โพสต์
 * ไม่ต้องบันทึกลงเทิร์มแคช
 * */
$query = new WP_Query([
	'posts_per_page' => 50,
    'update_post_term_cache' => false
]);

บทความเวิร์ดเพลสและปลั๊กอินที่น่าสนใจของเรา

สำหรับบทความ WP Query ในบทความนี้ ผมได้เขียนอธิบายทุก พารามิเตอร์ทั้งหมดแล้ว เหมาะสำหรับผู้ที่สนใจเขียนเว็บไซต์ ทำเว็บไซต์ด้วยเวิร์ดเพลส

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

ที่มา : wordpress.org

บทความ
WP Query คลาสสำคัญสำหรับการคิวรี่บนเวิร์ดเพลส
บทความเรื่อง
WP Query คลาสสำคัญสำหรับการคิวรี่บนเวิร์ดเพลส
คำโปรย
wp query - การทำเว็บไซต์ด้วยเวิร์ดเพลส จำเป็นต้องดึงข้อมูล มาดูการดึงข้อมูลด้วย wp_query จำเป็นต้องใช้แน่นอน เนื้อหาแน่น รวมการใช้ wp query ทุกรูปแบบครับ
ผู้เขียน
เว็บ
i-makeweb.com
โลโก้เว็บ ผู้เผยแพร่

หมวดหมู่ Develop

Shortpixel การตั้งค่าระบบหลังบ้านและการใช้งาน

บทความนี้ผมจะมาพาใช้งานและตั้งค่า shortpixel setting กันนะครับ เป็นบทความการใช้งาน shortpixel setting ด้วย ครบทุกออฟชั่น และรวม ปลั๊กอินเสริมด้วย

ShortPixel ปลั๊กอินลดขนาดภาพ พร้อมทำ WebP ง่ายๆ

หนึ่งในบทความที่จะพาทำให้เว็บท่านติดสปีด 90 – 100 แน่นอน shortpixel เครื่องมือการปรับภาพ มารู้จัก shortpixel กันก่อนว่าคืออะไร ทำอะไร ราคาเท่าไหร่