🌙

รู้จัก WP Query วิธีการประมวลผลของ WordPress

สิงหาคม 27, 2021 · Worapong Nijjarunkul

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

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

เจ้าของเว็บไซต์ Themevilles.com เป็นผู้เชี่ยวชาญ WordPress ที่มีประสบการณ์มากกว่า 10 ปี และเป็นผู้สอนคอร์ส WordPress บน SkillLane ผู้เรียนไว้วางใจนับพันคนด้วยความเชี่ยวชาญด้านการสร้างและแก้ปัญหาเว็บไซต์ WordPress ทั้งการออกแบบ พัฒนา ปรับความเร็ว ตลอดจนการทำ SEO — ทำให้ Themevilles.com เป็นแหล่งความรู้และบริการด้าน WordPress ที่มืออาชีพและเจ้าของธุรกิจให้ความไว้วางใจมายาวนาน หากคุณต้องการเว็บไซต์ที่สวย เร็ว ปลอดภัย และรองรับ SEO อย่างถูกต้อง ที่นี่คือคำตอบสำหรับคุณ