รู้จัก WP Query วิธีการประมวลผลของ WordPress
6 | | | WordPress, ความรู้, ระดับสูง WordPress
สวัสดีครับ พบกับบทความตอนใหม่ของ WordPress กันอีกแล้วนะครับ บทความนี้เราจะว่ากันเรื่องของการเขียนธีม WordPress เช่นเคยครับ โดยเราจะพูดถึงเรื่องของคลาส WP Query ของ WordPress ครับ ว่า มันคืออะไร วิธีการใช้งาน WP Query ข้อกำหนดและข้อจำกัดต่างๆ ครับ
WP Query คืออะไร
WP Query คือวิธีการประมวลผลของ WordPress ที่นำข้อมูลจากฐานข้อมูลมาทำการประมวลผลตามคำสั่งและข้อกำหนดแล้วนำมาแสดงผลในรูปแบบต่างๆ ซึ่ง WP Query นี้จะใช้ชื่อคลาสคือ wp_query() ในการทำงาน
วิธีการใช้งาน WP Query
จากที่กล่าวมาแล้วว่า WP Query นั้นจะใช้งานผ่านคลาสที่ชื่อ wp_query() ซึ่งคลาสนี้เวลาเรียกใช้งานจะเขียนในการกำหนดตัวแปรใหม่ขึ้นมาเพื่อทำการเก็บค่าที่ประมวลผลมาไว้ในตัวแปรนั้น ตามรูปแบบด้านล่าง
$the_query = new WP_Query( $args );
เราจะเห็นว่ามีการกำหนดตัวแปรชื่อ $the_query ทำหน้าที่เก็บข้อมูลที่ประมวลผลจากคลาส WP_Query โดยหน้าคลาสดังกล่าวจะมีคำว่า new ซึ่งจำเป็นที่จะต้องใส่ทุกครั้งเมื่อใช้คลาสน้ และภายในคลาส WP_Query จะมีตัวแปร $args ที่ทำการระบุถึงขอบเขต Parameter ที่ต้องการดึงมาประมวลผล เช่น ต้องการดึงเฉพาะหมวดหมู่นี้เท่านั้น จำนวนกี่รายการ เป็นต้น ซึ่งเราจะไว้กล่าวในหัวข้อถัดไป
เมื่อเราทำการดึงข้อมูลจาก WP_Query มาแล้ว เราจะทำการแสดงผลค่าที่เราเก็บไว้ที่ $the_query โดยค่าดังกล่าวจะแสดงผลได้เมื่ออยู่ในลูป if และ while เป็นรูปแบบพื้นฐานและเมื่อนำมาเขียนรวมกันก็จะได้ดังตัวอย่างด้านล่าง
<?php
// 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>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
จากโค้ดด้านบนจะเห็นว่า เราต้องการประมวลผลและให้แสดงผลออกมาเป็นรายการหัวข้อ (Title) ตามฟังก์ชั่น get_the_title() และหากไม่มีข้อมูลจะไม่แสดงข้อความใดๆ ในส่วนของด้านล่างสุดจะเห็นฟังก์ชั่น wp_reset_postdata() ฟังก์ชั่นนี้จะทำการเคลียร์ค่าที่เราได้ทำการประมวลผลมาเพื่อให้สถานะหลังจากฟังก์ชั่นนี้เป็นปกติ ทำให้ไม่เกิดการตีกันของข้อมูลครับ
พารามิเตอร์ภายใน WP Query
จากก่อนหน้าที่กล่าวมาแล้วเรื่องของตัวแปร $args ที่มีพารามิเตอร์ (Parameter) ภายใน เพื่อทำการกำหนดขอบเขตของการประมวลผลข้อมูล ในบทความนี้เราจะยกตัวอย่างพารามิเตอร์บางตัวที่ใช้บ่อยเท่านั้น ดังนั้นหากท่านต้องการศึกษาข้อมูลเพิ่มเติมให้ดูในส่วนของหัวข้อ WP Query ใน WordPress ครับ
วิธีการเขียนพารามิเตอร์
พารามิเตอร์จะถูกเขียนในรูปแบบของ Array โดยให้มี Key และ Value อยู่ ยกตัวอย่างเช่น
$query = new WP_Query( array( 'author' => 123 ) );
ความหมายคือ ให้ทำการประมวลผลหารายการบทความที่มีหมายเลขไอดีของผู้เขียนเลขที่ 123 นำมาแสดงผล โดย key จะเป็นคำว่า author และ Value จะเป็นเลข 123 ครับ เราอาจนำพารามิเตอร์มาใช้งานร่วมกันได้ด้วย ยกตัวอย่างเช่น
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 1,
'tax_query' => [
'relation' => 'OR',
[
'taxonomy' => 'team',
'field' => 'slug',
'terms' => $team_slug,
],
],
'ignore_sticky_posts' => 1,
];
Key ที่นำมาใช้มีหลายประเภทขึ้นอยู่กับว่าต้องการใส่ขอบเขตใด เช่น พารามิเตอร์ผู้เขียน (Author Parameters) ก็จะใช้คีย์ที่เกี่ยวข้องกับ author พารามิเตอร์หมวดหมู่ (Category Parameters) ก็จะใช้คีย์เป็น cat พารามิเตอร์ป้ายกำกับ (Tag Parameters) ก็จะใช้คีย์เป็น tag พารามิเตอร์เรื่องและหน้า (Post & Page Parameters) ก็จะใช้คีย์ post หรือ page พารามิเตอร์เรียงลำดับ (Order & Orderby Parameters) ก็จะเป็น order และ orberby เป็นต้น

รายการพารามิเตอร์
พารามิเตอร์ผู้เขียน (Author Parameters)
การกำหนดขอบเขตพารามิเตอร์ผู้เขียน โดยวิธีการดังต่อไปนี้
- แสดงรายการบทความโดยใช้รหัสไอดีของผู้เขียน
$query = new WP_Query( array( 'author' => 123 ) );
- แสดงรายการบทความโดยใช้ชื่อของผู้เขียน
$query = new WP_Query( array( 'author_name' => 'rami' ) );
- แสดงรายการบทความในกรณีที่มีผู้เขียนหลายคน
$query = new WP_Query( array( 'author' => '2,6,17,38' ) );
- แสดงรายการบทความทั้งหมดยกเว้นไม่แสดงบทความที่กำหนด
$query = new WP_Query( array( 'author' => -12 ) );
พารามิเตอร์หมวดหมู่ (Category Parameters)
การกำหนดขอบเขตพารามิเตอร์หมวดหมู่ โดยวิธีการดังต่อไปนี้
- แสดงรายการโดยใช้ไอดีของหมวดหมู่
$query = new WP_Query( array( 'cat' => 4 ) );
- แสดงรายการโดยใช้สลักของหมวดหมู่
$query = new WP_Query( array( 'category_name' => 'staff' ) );
- แสดงรายการหมวดหมู่โดยไม่รวมหมวดหมู่ย่อยของหมวดหมู่นั้น
$query = new WP_Query( array( 'category__in' => 4 ) );
- แสดงรายการหมวดหมู่หลายหมวดหมู่โดยไอดีของหมวดหมู่
$query = new WP_Query( array( 'cat' => '2,6,17,38' ) );
- แสดงรายการหมวดหมู่หลายหมวดหมู่โดยสลักของหมวดหมู่
$query = new WP_Query( array( 'category_name' => 'staff,news' ) )
สำหรับพารามิเตอร์แท็กก็จะคล้ายกับหมวดหมู่ แต่เปลี่ยนจาก category เป็น tag
พารามิเตอร์เรื่องและหน้า (Post & Page Parameters)
- แสดงบทความด้วยหมายเลขไอดีของบทความ
$query = new WP_Query( array( 'p' => 7 ) );
- แสดงหน้าคงที่ด้วยหมายเลขไอดีของหน้านั้น
$query = new WP_Query( array( 'page_id' => 7 ) );
- แสดงบทความหรือหน้าโดยสลัก
$query = new WP_Query( array( 'name' => 'about-my-life' ) );
- แสดงหน้าคงที่โดยสลัก
$query = new WP_Query( array( 'pagename' => 'contact' ) );
- แสดงรายการหน้าที่อยู่ภายในหมายเลขไอดีที่กำหนด
$query = new WP_Query( array( 'post_type' => 'page', 'post__in' => array( 2, 5, 12, 14, 20 ) ) );
พารามิเตอร์ประเภทของบทความ (Post Type Parameters)
พารามิเตอร์ประเภทของบทความนี้มีไว้เพื่อให้สะดวกในกรณีที่มีประเภทของบทความที่ไม่ได้เป็นพื้นฐาน (Default)
- แสดงเฉพาะหน้าเท่านั้น
$query = new WP_Query( array( 'post_type' => 'page' ) );
- แสดงรายการประเภทของบทความ หน้า และประเภทบทความที่กำหนด
$args = array(
'post_type' => array( 'post', 'page', 'movie', 'book' )
);
$query = new WP_Query( $args );
พารามิเตอร์กำหนดจำนวนรายการบทความ
- แสดงจำนวน x บทความต่อหนึ่งหน้า
$query = new WP_Query( array( 'posts_per_page' => 3 ) );
- แสดงจำนวนบทความทั้งหมดในหนึ่งหน้า
$query = new WP_Query( array( 'posts_per_page' => -1 ) );
พารามิเตอร์ลำดับ (Order & Orderby Parameters)
พารามิเตอร์นี้มีไว้ทำการจัดเรียงลำดับในรายการที่แสดงผล
Order เป็นพารามิเตอร์ที่ไว้จัดเรียงลำดับในลักษณะจากสูงสุดไปต่ำสุดหรือจากต่ำสุดไปสูงสุด
- ASC เป็นการเรียงำดับจากต่ำสุดไปสูงสุด
- DESC เป็นการเรียงลำดับจากสูงสุดไปต่ำสุด
Orderby เป็นพารามิเตอร์ที่ไว้จัดเรียงตามกลุ่มลักษณะ
- None เป็นการไม่จัดเรียง
- ID เป็นการจัดเรียงโดยรหัสไอดี
- Author เป็นการจัดเรียงตามชื่อผู้เขียน
- Title เป็นการจัดเรียงตามหัวข้อเรื่อง
- Name เป็นการจัดเรียงตามสลักของบทความ
- Date เป็นการจัดเรียงตามวันที่
- Modified เป็นการจัดเรียงตามการแก้ไข
- Rand เป็นการจัดเรียงแบบสุ่ม
ตัวอย่างการจัดเรียง
แสดงผลการจัดเรียงตามหัวข้อบทความเรียงลำดับจากพยัญชนะท้ายสุดมาพยัญชนะก่อนหน้า
$args = array(
'orderby' => 'title',
'order' => 'DESC',
);
$query = new WP_Query( $args );
แสดงผลการจัดเรียงแบบสุ่มโดยแสดง 1 รายการในหน้านั้นๆ
$args = array(
'orderby' => 'rand',
'posts_per_page' => '1',
);
$query = new WP_Query( $args );
สรุป
เราจะเห็นได้ว่าการใช้งาน WP Query นั้นไม่ยากเลย เพียงแต่เราต้องเข้าใจก่อนว่า เราต้องการเนื้อหาประเภทใดมาแสดงผล แล้วเราก็ไปทำการกำหนดขอบเขตของการใช้งานเพื่อทำหน้าที่กรองหรือเลือกรายการที่เราต้องการใช้งานจริงๆเท่านั้น เรายังสามารถใช้การกรองได้อีกหลากหลายวิธี เช่นการใช้ Meta Query หรือ Date Query ในการกรอง ซึ่งเนื้อหาจะค่อนข้างซับซ้อนมากขึ้นกว่าเดิม ดังนั้นสำหรับผู้ที่สนใจก็สามารถไปศึกษาเพิ่มเติมกันได้นะครับ สำหรับบทความนี้ก็ขอจบไว้เพียงเท่านี้ สวัสดีครับ..
