Wordpress Woocommerce自定义排序在刷新时显示不同的结果

Wordpress Woocommerce自定义排序在刷新时显示不同的结果,wordpress,woocommerce,Wordpress,Woocommerce,我已经为woocommerce添加了一个自定义orderby,但是每次我刷新它都会带来不同的结果!不确定为什么数据库中存储的值从1,2,3,4,5一直到418都是1,2,3,4,5等。我使用foreach方法而不是WP_查询在页面上显示产品 function skyverge_add_postmeta_ordering_args( $sort_args ) { $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GE

我已经为woocommerce添加了一个自定义orderby,但是每次我刷新它都会带来不同的结果!不确定为什么数据库中存储的值从1,2,3,4,5一直到418都是1,2,3,4,5等。我使用foreach方法而不是WP_查询在页面上显示产品

function skyverge_add_postmeta_ordering_args( $sort_args ) {
    
    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    $sort_args['orderby']  = 'meta_value_num';
    $sort_args['order']    = 'asc';
    $sort_args['meta_key'] = 'lot_number';
    return $sort_args;
} add_filter( 'woocommerce_get_catalog_ordering_args', 'skyverge_add_postmeta_ordering_args' );


// Add these new sorting arguments to the sortby options on the frontend
function skyverge_add_new_postmeta_orderby( $sortby ) {
    $sortby['lot_number'] = __( 'Sort by Lot Number', 'woocommerce' );
    return $sortby;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'skyverge_add_new_postmeta_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'skyverge_add_new_postmeta_orderby' );
我也试过:

function skyverge_add_postmeta_ordering_args( $args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( $orderby_value == 'lot_number' ) {
        $args['orderby'] = 'meta_value_num';
        $args['order'] = 'ASC';
        $args['meta_key'] = 'lot_number';
    } return $args;
} add_filter( 'woocommerce_get_catalog_ordering_args', 'skyverge_add_postmeta_ordering_args', 10, 1 );   

function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['lot_number'] = 'Sort By Lot Number';
    return $sortby;
} add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby', 10, 1 );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby', 10, 1 );
用于显示产品的代码:

function gw_new_auctions_fun( $atts ) {

    extract(shortcode_atts(array(
        'per_page'  => 25,
        'orderby' => 'lot_number',
        'order' => 'desc'
    ), $atts));

    if(!function_exists('wc_get_products')) {return;}

    $paged = (get_query_var('paged')) ? absint(get_query_var('paged')) : 1;
    $ordering = WC()->query->get_catalog_ordering_args();
    $ordering['orderby'] = array_shift(explode(' ', $ordering['orderby']));
    $ordering['orderby'] = stristr($ordering['orderby'], 'price') ? 'meta_value_num' : $ordering['orderby'];
    $products_per_page = apply_filters('loop_shop_per_page', $per_page);

    $products_ids = wc_get_products(array(
        'status' => 'publish',
        'type' => 'auction',
        'limit' => 25,
        'page' => $paged,
        'paginate' => true,
        'order' => $ordering['order'],
        'orderby' => $ordering['orderby'],
        'return' => 'ids',
        'meta_query' => array(
            'key' => 'woo_ua_auction_closed',
            'compare' => 'NOT EXISTS',
        ),
    ));

    wc_set_loop_prop('current_page', $paged);
    wc_set_loop_prop('is_paginated', wc_string_to_bool(true));
    wc_set_loop_prop('page_template', get_page_template_slug());
    wc_set_loop_prop('per_page', $products_per_page);
    wc_set_loop_prop('total', $products_ids->total);
    wc_set_loop_prop('total_pages', $products_ids->max_num_pages);

    ob_start();
    if($products_ids) : do_action('woocommerce_before_shop_loop')?>
        <div class="filters">
            <?php get_template_part('inc/partials/breadcrumbs'); ?>
            <div class="page-number"><p>Page <?php if ($paged == 0): $paged = 1; endif; echo $paged;?> of <?php echo wc_get_loop_prop( 'total_pages' );?></p></div>
            <div class="total-items"><p><?php echo wc_get_loop_prop( 'total' );?> Items</p></div>
            <div class="dropdown-filter"><p>Sort By: </p><?php woocommerce_catalog_ordering();?></div>
        </div>
        <ul class="products">
            <?php do_action('woocommerce_product_loop_start');
                foreach($products_ids->products as $featured_product) {
                    $post_object = get_post($featured_product);
                    setup_postdata($GLOBALS['post'] =& $post_object);
                    wc_get_template_part('content', 'product-archive');
                }
            do_action('woocommerce_product_loop_end') ?>
        </ul>
        <?php do_action( 'woocommerce_after_shop_loop' );
    else :
        wc_get_template( 'loop/no-products-found.php' );
    endif; wp_reset_postdata();
    
    return '<div class="woocommerce woocommerce-auction">' . ob_get_clean() . '</div>';
}
功能gw_新_拍卖_乐趣($atts){
提取(短码)附件(数组)(
“每页”=>25,
“订购人”=>“批号”,
“订单”=>“描述”
)美元(附件);;
如果(!function_exists('wc_get_products')){return;}
$paged=(get_query_var('paged'))?absint(get_query_var('paged')):1;
$ordering=WC()->query->get_catalog_ordering_args();
$ordering['orderby']=数组移位(分解(''''$ordering['orderby']);
$ordering['orderby']=stristr($ordering['orderby'],'price')?'meta_value_num':$ordering['orderby'];
$products\ U per\ U page=应用\过滤器('loop\ U shop\ U per\ U page',$per\ U page);
$products\U ids=wc\U get\U产品(阵列)(
“状态”=>“发布”,
'类型'=>'拍卖',
“限制”=>25,
“页面”=>$paged,
“分页”=>正确,
'order'=>$ordering['order'],
'orderby'=>$ordering['orderby'],
'返回'=>'标识',
“元查询”=>数组(
“key”=>“woo_ua_拍卖会结束”,
“比较”=>“不存在”,
),
));
wc_set_loop_prop('current_page',$paged);
wc_set_loop_prop('is_paginated',wc_string_to_bool(true));
wc_set_loop_prop('page_template',get_page_template_slug());
wc_set_loop_prop('每页',每页$products_);
wc\u set\u loop\u prop('total',$products\u id->total);
wc_set_loop_prop('total_pages',$products_id->max_num_pages);
ob_start();
if($products\U ID):是否执行操作('WOOMECORCE\U BEFOR\U shop\U loop')?>
第页,共页

项目

排序方式:


对于第一个-检查此键“lot_number”和“lotnumber”,可能有错误,可能您可以提供网站url吗?@AlexanderZ no luck,此处:
bit.ly/3kihMvw
您使用的是
$orderby_value=isset(..
但是你不再使用它了。试试看,它是一个不同的meta_键,但归结起来是相同的thing@7uc1f3r这让它变得非常有趣,你知道为什么它会带来不同的产品订单吗?我将添加我的短代码,以引入过滤器/产品。