วิธีทำจัดจัดเรียงสินค้า (sorting) แบบหลายเงื่อนไข สำหรับ WooCommerce

ผมมีโปรเจ็คอยู่ตัวหนึ่งครับ ที่มีเงื่อนไขในการจัดเรียงสินค้าที่พิเศษกว่าเว็บขายของทั่วไป นั่นก็คือมีการต้องการจัดเรียงสินค้าแบบเรียงตามรุ่น และเรียงตามราคาแพงสุด นั่นก็คือรุ่นใหม่สุดแพงสุดต้องมาก่อนเป็นอันดับแรก ซึ่งความต้องการแบบนี้ แน่นอนว่า WooCommerce แบบ Default ยังไม่มีมาให้แน่ๆ ก็เป็นหน้าที่ของโปรแกรมเมอร์อย่างเราๆ ที่ต้องมารับมือต่อใช่ไหมครับ

ก่อนอื่นนั้น สำหรับเคสนี้ผมทำการสร้าง Custom Field สำหรับสินค้าแต่ละตัวขึ้นมาก่อนครับ เพื่อเอาไว้ให้ลูกค้าใส่ รุ่นปีของสินค้าตัวนั้น โดยตั้งชื่อฟิลด์ว่า year ครับผม . ส่วนตัวราคาก็เป็น meta key ของ WooCommerce อยู่แล้ว ชื่อว่า _price ครับ

หน้าที่ของเราก็คือ ต้องเอาเจ้าสองตัวนี้มาเป็นเงื่อนไขในการเช็คค่าและเอามาแสดงผล เราเรียกว่า Multi meta key ครับ

วิธีการทำตัวเช็คเงื่อนไข ให้เรานำโค้ดนี้ไปเขียนในไฟล์ functions.php ของธีมเรานะครับ


add_action( 'woocommerce_product_query', 'multi_meta_product_query' );
function multi_meta_product_query( $q ){

$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'relation' => 'AND',
"have_year" => array(
'key' => 'year',
'type' => 'numeric' ,
'compare' => 'EXISTS'
),
"_price" => array(
'key' => '_price',
'type' => 'numeric' ,
'compare' => 'EXISTS'
),

);
$q->set( 'meta_query', $meta_query );

$orderby = array(
'have_year' => 'DESC',
'_price' => 'DESC',

);

$q->set( 'orderby', $orderby );

}

เอาหละ เดี๋ยวผมขออธิบายโค้ดตัวนี้ก่อนนะครับ เราจะเห็นว่าตรงที่เป็น meta_query เราใส่เงื่อนไปขไปแล้วสองแบบ นั่นก็คือ


$meta_query[] = array(
'relation' => 'AND',
"have_year" => array(
'key' => 'year',
'type' => 'numeric' ,
'compare' => 'EXISTS'
),
"_price" => array(
'key' => '_price',
'type' => 'numeric' ,
'compare' => 'EXISTS'
),

);

ถ้าเรามีเงื่อนไขมากกว่านี้ก็ใส่ไปให้ครบครับ จากนั้นก็มาเริ่มทำการให้มันจัดเรียงลำดับครับ  ซึ่งก็คือตรงนี้


$orderby = array(
'have_year' => 'DESC',
'_price' => 'DESC',

);

โดยโค้ดด้านบน ผมให้เรียงแบบมากสุดไปน้อยสุดครับ ถ้าเราต้องการรูปแบบอื่นก็แก้ไขได้จาก DESC เป็น ASC อะไรแบบนี้ก็ได้แล้วแต่ที่เราปรารถนาครับ

สำหรับใครที่กำลังทำโปรเจ็ค WooCommerce แล้วมีความต้องการแนวๆนี้ก็ลองนำโค้ดไปปรับแต่งใช้งานดูได้นะครับ หวังว่าจะเป็นประโยชน์ให้กับทุกท่านได้ครับ แล้วเจอกันใหม่เด้อ

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

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

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

  • คุกกี้เพื่อการวิเคราะห์

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

  • คุกกี้เพื่อปรับเนื้อหาให้เข้ากับกลุ่มเป้าหมาย

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

บันทึก