ในในบทความพิเศษสำหรับสมาชิกนี้ เราจะได้เรียนรู้วิธีการเพิ่มตัวกรองสินค้าแนะนำในหน้า Admin ของ WooCommerce กันครับ เมื่อเร็วๆนี้ผมได้มีความจำเป็นต้องใช้ฟีเจอร์สินค้าแนะนำในการนำเสนอสินค้าบนเว็บไซต์ แต่พบว่าเราไม่สามารถกรองสินค้าแนะนำในหน้า Admin ได้ ทำให้การจัดการสินค้าเป็นไปด้วยความล่าช้า จึงได้นำโค้ดส่วนนี้มาแก้ปัญหา
เพิ่มตัวกรองไปยังหน้า Admin
ในโค้ดนี้เราเพิ่มกล่องตัวกรอง โดยมีตัวเลือก สถานะสินค้า, สินค้าแนะนำ, สินค้าทั่วไป
function filter_products_by_featured_status() {
global $typenow, $wp_query;
//เช็คว่าเป็นสินค้า
if ($typenow=='product') :
// Featured/ Not Featured
$output .= "<select name='featured_status' id='dropdown_featured_status'>";
$output .= '<option value="">'.__( 'สถานะสินค้า', 'woocommerce' ).'</option>';
$output .="<option value='featured' ";
if ( isset( $_GET['featured_status'] ) ) $output .= selected('featured', $_GET['featured_status'], false);
$output .=">".__( 'สินค้าแนะนำ', 'woocommerce' )."</option>";
$output .="<option value='normal' ";
if ( isset( $_GET['featured_status'] ) ) $output .= selected('normal', $_GET['featured_status'], false);
$output .=">".__( 'สินค้าทั่วไป', 'woocommerce' )."</option>";
$output .="</select>";
echo $output;
endif;
}
//Hook ไว้ก่อนตัวกรองทั้งหมดในหน้า Admin
add_action('restrict_manage_posts', 'filter_products_by_featured_status');
เพิ่ม Query
function featured_products_admin_filter_query( $query ) {
global $typenow;
if ( $typenow == 'product' ) {
// Subtypes
if ( ! empty( $_GET['featured_status'] ) ) {
if ( $_GET['featured_status'] == 'featured' ) {
$query->query_vars['tax_query'][] = array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => 'featured',
);
} elseif ( $_GET['featured_status'] == 'normal' ) {
$query->query_vars['tax_query'][] = array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => 'featured',
'operator' => 'NOT IN',
);
}
}
}
}
add_filter( 'parse_query', 'featured_products_admin_filter_query' );
เพิ่มโค้ดเข้าไปใน WordPress
/**
* Filter products by type
*
* @access public
* @return void
*/
function filter_products_by_featured_status() {
global $typenow, $wp_query;
if ($typenow=='product') :
// Featured/ Not Featured
$output .= "<select name='featured_status' id='dropdown_featured_status'>";
$output .= '<option value="">'.__( 'สถานะสินค้า', 'woocommerce' ).'</option>';
$output .="<option value='featured' ";
if ( isset( $_GET['featured_status'] ) ) $output .= selected('featured', $_GET['featured_status'], false);
$output .=">".__( 'สินค้าแนะนำ', 'woocommerce' )."</option>";
$output .="<option value='normal' ";
if ( isset( $_GET['featured_status'] ) ) $output .= selected('normal', $_GET['featured_status'], false);
$output .=">".__( 'สินค้าทั่วไป', 'woocommerce' )."</option>";
$output .="</select>";
echo $output;
endif;
}
add_action('restrict_manage_posts', 'filter_products_by_featured_status');
/**
* Filter the products in admin based on options
*
* @access public
* @param mixed $query
* @return void
*/
function featured_products_admin_filter_query( $query ) {
global $typenow;
if ( $typenow == 'product' ) {
// Subtypes
if ( ! empty( $_GET['featured_status'] ) ) {
if ( $_GET['featured_status'] == 'featured' ) {
$query->query_vars['tax_query'][] = array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => 'featured',
);
} elseif ( $_GET['featured_status'] == 'normal' ) {
$query->query_vars['tax_query'][] = array(
'taxonomy' => 'product_visibility',
'field' => 'slug',
'terms' => 'featured',
'operator' => 'NOT IN',
);
}
}
}
}
add_filter( 'parse_query', 'featured_products_admin_filter_query' );