WooCommerce 自定义插件:检查客户完成的订单问题
WooCommerce custom plugin: Check for customer completed orders issue
我正在尝试编写一个简单的插件来显示新客户或返回客户的信息以及用户已完成订单的数量。为此,我创建了一个名为 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 之后的所有版本)。
status
应该是以下值之一:
'wc-pending','wc-processing','wc-on','wc-completed','wc-cancelled','wc-refunded','wc-failed'
参考文献:https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query#general
我正在尝试编写一个简单的插件来显示新客户或返回客户的信息以及用户已完成订单的数量。为此,我创建了一个名为 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 之后的所有版本)。
status
应该是以下值之一:
'wc-pending','wc-processing','wc-on','wc-completed','wc-cancelled','wc-refunded','wc-failed'
参考文献:https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query#general