1
Oct

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

Category: Blog / 184 views

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


Phraisohn Siripool is a Graphic Designer and Website Developer. Contact Buksohn for Your Business Endeavours
ปิดโหมดสีเทา