如何通过产品SKU显示Woocommerce产品

4

我的一个客户想要通过商品SKU显示所有的WooCommerce产品。

通常,我使用以下代码来显示产品:

$postArg = array('post_type'=>'product',
                            'post_status'=>'publish',
                            'posts_per_page'=>-1,
                            'orderby'=>'data',
                            'order'=>'DESC',

                    );

            $queryGetFiles = get_posts($postArg);

现在我的客户希望在前端按照产品SKU显示所有产品。

SKU的格式如1041-14、1041-12、1041-16、1041、2001、3501等。

所有产品都有不同的SKU值,并且显示没有"-"字符的产品。

有人知道我该怎么做吗?


只是为了澄清,您的意思是按照SKU的顺序吗?所以100001会跟随100002等等? - Adam
所有产品都有不同的SKU值和显示,其中没有“-”字符。 - Samir Sheikh
6个回答

6

试试这个

$postArg = array(
       'post_type'      => 'product',
       'post_status'    => 'publish',
       'posts_per_page' => -1,
       'meta_key'       => '_sku',
       'orderby'        => 'meta_value' // meta_value_num if ordered by intergers
       'order'          => 'DESC',
);

$queryGetFiles = get_posts($postArg);

通过这篇文章的帮助得到了答案

(涉及it技术,需要根据具体语境进行翻译)

2
这应该是被接受的答案,因为问题不够清晰。 - LoicTheAztec

2
尝试将代码放入function.php文件中。
add_filter('woocommerce_get_catalog_ordering_args', 'am_woocommerce_catalog_orderby');
    function am_woocommerce_catalog_orderby( $args ) {
        $args['meta_key'] = '_sku';
        $args['orderby'] = 'meta_value_num';
        $args['order'] = 'desc'; 
        return $args;
    }

0

感谢大家的支持。

我已经通过以下方法自行解决了这个问题。

$postArg = array('post_type'=>'product',
                            'post_status'=>'publish',
                            'posts_per_page'=>-1,
                            'orderby'=>'date',
                            'order'=>'DESC',
                            'meta_query' => array(
                                    array(
                                            'key' => '_sku',
                                            'value' => '-',
                                            'compare' => 'NOT LIKE'
                                    )
                                ),
                    );

0
请尝试这个。如果完美运行,请告诉我...

/**
 * Adds the ability to sort products in the shop based on the SKU
 * Can be combined with tips here to display the SKU on the shop page: https://www.skyverge.com/blog/add-information-to-woocommerce-shop-page/
 */

function sv_add_sku_sorting( $args ) {

 $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

 if ( 'sku' == $orderby_value ) {
  $args['orderby'] = 'meta_value';
      $args['order'] = 'asc'; 
      // ^ lists SKUs alphabetically 0-9, a-z; change to desc for reverse alphabetical
  $args['meta_key'] = '_sku';
 }

 return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'sv_add_sku_sorting' );


function sv_sku_sorting_orderby( $sortby ) {
 $sortby['sku'] = 'Sort by SKU';
 // Change text above as desired; this shows in the sorting dropdown
 return $sortby;
}
add_filter( 'woocommerce_catalog_orderby', 'sv_sku_sorting_orderby' );
add_filter( 'woocommerce_default_catalog_orderby_options', 'sv_sku_sorting_orderby' );


用户想要按SKU(升序)显示产品。 - Sudharshan Nair
这似乎很有价值。 :-) - Sudharshan Nair

0
似乎后续版本的WooCommerce在产品页面上增加了手动拖放排序功能,这将覆盖我们尝试按照SKU排序的任何函数。以下方法对我有效。
add_action( 'woocommerce_product_query', 'custom_sort_products_by_sku' );

function custom_sort_products_by_sku( $query ) {
// Check if on a product category archive page
if ( ! is_admin() && is_product_category() && $query->is_main_query() ) {
    // Set the orderby parameter to 'meta_value' for SKU
    $query->set( 'orderby', 'meta_value' );
    // Set the meta key to '_sku' which is the SKU
    $query->set( 'meta_key', '_sku' );
    // Set the order parameter to 'ASC' for ascending order
    $query->set( 'order', 'ASC' );
}
}

// Add the 'Sort by SKU' option to the 
sorting dropdown
add_filter( 'woocommerce_catalog_orderby', 
'add_sort_by_sku_to_dropdown' );
function add_sort_by_sku_to_dropdown( $options ) {
// Add 'Sort by SKU' option
$options['sort_by_sku'] = __('Sort by SKU', 'woocommerce');
return $options;
}

// Handle the sorting logic for 'Sort by SKU'
add_action( 'woocommerce_product_query', 'sort_products_by_sku' );
function sort_products_by_sku( $query ) {
// Check if 'orderby' is set to 'sort_by_sku'
if ( isset( $_GET['orderby'] ) && 'sort_by_sku' === $_GET['orderby'] ) {
    $query->set( 'orderby', 'meta_value' );
    $query->set( 'meta_key', '_sku' );
    $query->set( 'order', 'ASC' );
}
}

// Ensure the 'Sort by SKU' option works correctly with WooCommerce's session 
handling
add_filter( 'woocommerce_default_catalog_orderby_options', 'add_sort_by_sku_to_dropdown' );
add_filter( 'woocommerce_catalog_orderby', 'add_sort_by_sku_to_dropdown' );

0
我刚刚注册了一个账号来回复。
我之前遇到了一个完全相同的问题,一个客户希望按照产品的sku进行排序。上面的脚本按照WordPress的通用id而不是产品的sku进行排序。以下是按照sku排序产品的方法:
add_filter('woocommerce_get_catalog_ordering_args', 'am_woocommerce_catalog_orderby');
function am_woocommerce_catalog_orderby( $args ) {
    $args['meta_key'] = '_sku';
    $args['orderby'] = '_sku';
    $args['order'] = 'asc'; 
    return $args;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接