根据 Woocommerce 中的运输姓氏按字母顺序对订单 ID 进行排序
Posted
技术标签:
【中文标题】根据 Woocommerce 中的运输姓氏按字母顺序对订单 ID 进行排序【英文标题】:Sort Orders IDs alphabetically based on the shipping last name in Woocommerce 【发布时间】:2018-03-09 00:18:40 【问题描述】:我需要按字母顺序对我的 $order_name(更具体地说是 $order_shipping_last_name)进行排序。我在许多不同的地方尝试了许多不同的基本 php sort() 方法,但无法使其正常工作。我假设我错过了什么?
在我的代码中,get_all_orders_that_have_a_product_variation( $product_id );
函数来自 this answer code,它允许从变体 ID 获取 订单 ID 数组...
列表在底部附近输出为$variables['order_list']
。
add_action( 'fue_before_variable_replacements', 'w_add_stuff', 10, 4);
function w_add_stuff( $var, $email_data, $fue_email, $queue_item )
$product_id = 2339;
$orders_ids = get_all_orders_that_have_a_product_variation( $product_id );
// Iterating through each order
foreach( $orders_ids as $order_id )
// Name Data
$order = wc_get_order($order_id);
$order_data = $order->get_data();
$order_shipping_first_name = $order_data['shipping']['first_name'];
$order_shipping_last_name = $order_data['shipping']['last_name'];
$order_name = $order_shipping_last_name . ',' . ' ' . $order_shipping_first_name . ' ';
// Iterating through each order item
foreach ($order->get_items() as $item_key => $item_values)
//Quantity Data
$item_data = $item_values->get_data();
$variation_id = $item_data['variation_id'];
$item_quantity = $item_data['quantity'];
// Display name and quantity of specific variation only
if ( $variation_id == $product_id )
$variables['order_list'] .= $order_name . ' ' . '...' . ' ' . $item_quantity . '<br>';
【问题讨论】:
使用调试器单步调试代码时,您发现了什么?当你撒error_log()
时,你会打电话来看看发生了什么?此外,为您的代码创建一个工作示例来演示该问题,以便人们可以对其进行试验。但在你遇到那么多麻烦之前,先谈谈你的调试器和error_log()
结果。 (不是我,而是用结果编辑你的问题,这样每个人都可以在不阅读 cmets 的情况下看到。)
**$stuff....;**
这个东西是怎么回事?最后我知道**
在数学中类似于2^10
的幂运算。此外,我根本看不到sort
。
【参考方案1】:
这需要在获取订单 ID 的函数之前完成,对包含的 SQL 查询稍作更改,这样:
function get_all_orders_that_have_a_product_variation( $variation_id )
global $wpdb;
// Getting all Order IDs with that variation ID
$order_ids = $wpdb->get_col( "
SELECT DISTINCT woi.order_id
FROM $wpdb->prefixwoocommerce_order_items AS woi
LEFT JOIN $wpdb->prefixwoocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
LEFT JOIN $wpdb->prefixpostmeta AS pm ON woi.order_id = pm.post_id
WHERE woim.meta_key LIKE '_variation_id'
AND woim.meta_value = '$variation_id'
AND pm.meta_key LIKE '_shipping_last_name'
ORDER BY pm.meta_value ASC
" );
return $order_ids; // return the array of orders ids
代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。
使用发货姓氏对订单 ID 排序数组进行了更改。
【讨论】:
以上是关于根据 Woocommerce 中的运输姓氏按字母顺序对订单 ID 进行排序的主要内容,如果未能解决你的问题,请参考以下文章
根据 Woocommerce 3 中的运输方式显示或隐藏结帐字段
根据 Woocommerce 中的运输方式和付款方式添加费用
根据选择的运输有条件地隐藏 WooCommerce 中的结帐字段