php - WooCommerce 自定义插件:检查客户完成的订单问题
问题描述
我正在尝试编写一个简单的插件来显示新的或返回的客户信息以及来自用户的已完成订单的数量。为此,我创建了一个名为 Returning-customers.php 的文件夹和同名文件。在这个文件中,我编写了以下代码:
/*
* Plugin Name: Kasha returning customers
* Description: Displays information returning customer or new, and also displays the number of completed orders
* Version: 1.0.0
* Author: Me
* License: GPLv2 or later
*/
add_filter( 'woocommerce_admin_order_data_after_order_details', 'render_customer_is_new_field' );
function render_customer_is_new_field($order)
{
$args = array(
'status' => 'completed',
'return' => 'ids',
);
if ( $order->get_user_id() !== 0 ) {
$args['customer_id'] = $order->get_customer_id();
} else {
$args['customer'] = $order->get_billing_email();
}
$customer_has_existing_orders = wc_get_orders( $args );
$orders_count = count($customer_has_existing_orders);
$markData = ( (int)count($customer_has_existing_orders) >= 2 )
? array('status-processing', 'Returning customer')
: array('status-on-hold', 'New Customer');
echo '
<p class="kasha-customer-counter" style="float: left">
<mark class="order-status '. $markData[0] .'">
<span>'. $markData[1] .' <strong style="color:#ff0000;font-weight: 900;"> '. $orders_count .'</strong></span>
</mark>
</p>
';
}
但是这段代码不能正常工作。我总是看到客户已经退货并且他的所有订单都被考虑在内。但是,只有在两个状态为已完成的订单后才应放置用户正在返回客户的标记,并且仅应考虑状态为已完成的订单。现在看起来 wc_get_orders 函数不起作用。当我写: var_dump(wc_get_orders()) 我看到 NULL。
解决方案
首先,您的文件夹名称应该只被称为returning-customers
不带.php
名称或任何名称(小写,不带空格),woo-returning-customers
因为它与 wwocommerce 相关。你可以保持你的 php 文件名不变。
然后使用以下内容:
/*
* Plugin Name: Kasha returning customers
* Plugin URI:
* Description: Displays information returning customer or new, and also displays the number of completed orders.
* Version: 1.0.0
* Author: Me
* Author URI:
* License: GPLv2 or later
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
add_action( 'woocommerce_admin_order_data_after_order_details', 'render_customer_is_new_field' );
function render_customer_is_new_field( $order ) {
if( is_a( $order, 'WC_Order') ) {
$args = array(
'limit' => -1,
'status' => 'completed',
'return' => 'ids',
);
if ( $order->get_user_id() > 0 ) {
$args['customer_id'] = $order->get_customer_id();
} else {
$args['customer'] = $order->get_billing_email();
}
$orders_ids = wc_get_orders( $args );
$orders_count = intval( count($orders_ids) );
$markData = ( $orders_count > 1 ) ? array('status-processing', 'Returning customer') : array('status-on-hold', 'New Customer');
echo '
<p class="kasha-customer-counter" style="float: left">
<mark class="order-status '. $markData[0] .'">
<span>'. $markData[1] .' <strong style="color:#ff0000;font-weight: 900;"> '. $orders_count .'</strong></span>
</mark>
</p>';
}
}
}
经过测试并在最后一个 WooCommerce 版本上运行(并且应该适用于自 3.0 以来的所有版本)。
推荐阅读
- codenameone - 使用 ExecuteOfflineCommand 更有效地执行同步
- php - 将数组数组从 phpexcel 传递到刀片 laravel
- javascript - 强制 AngularJS 指令链接外部摘要循环
- qemu - AFL qemu 模式不适用于 dlopen()
- javascript - 限制 div 中所有可选项卡子的选项卡
- macos - Mac OS X 拆分 csv 不起作用
- batch-file - 如何使用批处理文件将多个文件夹压缩为一个
- python - 使用 Python 将 JSON 对象导入 Postgresql
- android - 持有视图模型的引用
- javascript - 从下拉菜单中自动填充两个输入框