من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

افزودن فیلتر نمایش محصولات دارای کامنت در ووکامرس

افزودن فیلتر نمایش محصولات دارای کامنت در ووکامرس
افزودن فیلتر نمایش محصولات دارای کامنت در ووکامرس

افزودن فیلتر نمایش محصولات دارای کامنت در ووکامرس

در این نوشته به شما روش افزودن یک فیلتر جدید در ووکامرس را می‌دهیم تا محصولات دارای نظر را فقط نمایش دهید.

 

افزودن فیلتر نمایش محصولات دارای کامنت در ووکامرس

برای این‌کار در فایل functions.php قالب فعال فعلی وردپرس خود قطعه کد زیر را اضافه کنید و آن‌را ذخیره کنید:

function add_custom_query_var( $vars ) {
    $vars[] = 'orderby';
    return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );

// Add custom sorting option
function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['has_comments'] = 'محصولات دارای نظر';
    return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );

// Modify the product query to sort by comment count and exclude products without comments
function custom_woocommerce_product_query( $q ) {
    if ( isset( $_GET['orderby'] ) && 'has_comments' == $_GET['orderby'] ) {
        $q->set( 'orderby', 'comment_count' );
        $q->set( 'order', 'DESC' );

        // Custom join and where clauses to exclude products without comments
        add_filter( 'posts_join', 'custom_posts_join' );
        add_filter( 'posts_where', 'custom_posts_where' );
    }
}
add_action( 'woocommerce_product_query', 'custom_woocommerce_product_query' );

function custom_posts_join( $join ) {
    global $wpdb;
    if ( is_admin() ) return $join;
    $join .= " LEFT JOIN (SELECT comment_post_ID, COUNT(*) as comment_count FROM {$wpdb->comments} WHERE comment_approved = 1 GROUP BY comment_post_ID) wc_comments ON {$wpdb->posts}.ID = wc_comments.comment_post_ID ";
    return $join;
}

function custom_posts_where( $where ) {
    global $wpdb;
    if ( is_admin() ) return $where;
    $where .= " AND wc_comments.comment_count > 0 ";
    return $where;
}

// Cleanup the join and where filters after the query is run
function remove_custom_posts_join_where( $query ) {
    if ( isset( $_GET['orderby'] ) && 'has_comments' == $_GET['orderby'] ) {
        remove_filter( 'posts_join', 'custom_posts_join' );
        remove_filter( 'posts_where', 'custom_posts_where' );
    }
}
add_action( 'woocommerce_after_shop_loop', 'remove_custom_posts_join_where' );
add_action( 'wp_reset_postdata', 'remove_custom_posts_join_where' );

 

اگر نیاز به آموزش‌های بیش‌تر وردپرس دارید در بخش نظرات همین نوشته برای ما بنویسید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 1 میانگین: 5]