รู้จัก WP Query วิธีการประมวลผลของ 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 เป็นต้น

สอน WordPress หรือ WooCommerce
สอน WordPress หรือ WooCommerce

รายการพารามิเตอร์

พารามิเตอร์ผู้เขียน (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 ในการกรอง ซึ่งเนื้อหาจะค่อนข้างซับซ้อนมากขึ้นกว่าเดิม ดังนั้นสำหรับผู้ที่สนใจก็สามารถไปศึกษาเพิ่มเติมกันได้นะครับ สำหรับบทความนี้ก็ขอจบไว้เพียงเท่านี้ สวัสดีครับ..

ปรึกษาด้านเว็บไซต์
ปรึกษาด้านเว็บไซต์