เพิ่มตัวกรองสินค้าแนะนำในหน้า Admin ของ WooCommerce

ในในบทความพิเศษสำหรับสมาชิกนี้ เราจะได้เรียนรู้วิธีการเพิ่มตัวกรองสินค้าแนะนำในหน้า 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' );

Leave a Reply