管理员使用 HPOS 在 WooCommerce 中订购自定义可排序列

问题描述 投票:0回答:2

我最近升级了 Woocommerce 网站以使用 HPOS,我发现自定义列排序不再起作用。在 Woocommerce 中,我为客户的姓氏设置了一个可排序列。我调整了代码以使用 meta_query 根据 _shipping_last_name 对订单进行排序,但没有返回结果。我有一列显示正确的姓氏值,但排序功能无法排序。

目前的排序代码如下:

function hpos_args( $query_vars ) {

    if(isset($query_vars['orderby']) && $query_vars['orderby'] == 'customer_user'){
        $query_vars['meta_query'] = array(array(    'key' => '_shipping_last_name' ));
        $query_vars['orderby'] = array('meta_value' => $query_vars['order']);
    }

    return $query_vars;
}
add_filter( 'woocommerce_order_query_args', 'hpos_args', 10, 1 );

'customer_user' 是列标题,列中的值是 _shipping_last_name 的元值

php wordpress woocommerce orders highperformance
2个回答
1
投票

我按照 @LoicTheAztec 的建议进行操作,并为运输姓氏创建了自定义元数据。然后我可以使用以下代码对列进行排序:

function hpos_args( $query_vars ) {

    $query_vars['meta_query'] = array(array(    'key' => '_sorting_name' ));
    $query_vars['orderby'] = array('meta_value' => $query_vars['order']);

    return $query_vars;
}

add_filter( 'woocommerce_order_query_args', 'hpos_args', 10, 1 );

我在使用密钥名称 _shipping_last_name 时遇到问题,因此使用 _sorting_name。


0
投票

当您只有一个元键时,只需使用“meta_key”查询参数即可。

此外,您需要定位“customer_user”

order_by
查询字符串参数,例如:

// Define custom sortable column(s)
add_filter( "woocommerce_shop_order_list_table_sortable_columns", 'custom_admin_order_list_sortable_columns' );
function custom_admin_order_list_sortable_columns( $sortable_columns ) {
    $sortable_columns['customer_user'] = 'customer_user';

    return $customer_user;
}

// Alter the query for custom sortable column(s)
add_filter( 'woocommerce_order_query_args', 'filter_admin_hpos_order_lists', 10, 1 );
function filter_admin_hpos_order_lists( $query_vars ) {
    if ( isset($_GET['orderby']) && $_GET['orderby'] === 'customer_user' ) {
        $query_vars['meta_key'] = '_sorting_name';
        $query_vars['orderby'] = array('meta_value' => $query_vars['order']);
    }
    return $query_vars;
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.