Php WooCommerce自定义插件:检查客户完成的订单问题

Php WooCommerce自定义插件:检查客户完成的订单问题,php,wordpress,woocommerce,plugins,hook-woocommerce,Php,Wordpress,Woocommerce,Plugins,Hook Woocommerce,我正在尝试编写一个简单的插件,它将显示新的或返回的客户信息以及用户已完成订单的数量。为此,我创建了一个名为returning-customers.php的文件夹和同名文件。在这个文件中,我编写了下一个代码: /* *插件名称:Kasha返回客户 *描述:显示返回客户或新客户的信息,还显示已完成订单的数量 *版本:1.0.0 *作者:我 *许可证:GPLv2或更高版本 */ 添加过滤器('woocommerce\u admin\u order\u data\u在\u order\u details

我正在尝试编写一个简单的插件,它将显示新的或返回的客户信息以及用户已完成订单的数量。为此,我创建了一个名为returning-customers.php的文件夹和同名文件。在这个文件中,我编写了下一个代码:

/*
*插件名称:Kasha返回客户
*描述:显示返回客户或新客户的信息,还显示已完成订单的数量
*版本:1.0.0
*作者:我
*许可证:GPLv2或更高版本
*/
添加过滤器('woocommerce\u admin\u order\u data\u在\u order\u details'之后,'render\u customer\u是\u new\u字段');
函数render\u customer\u is\u new\u字段($order)
{
$args=数组(
“状态”=>“已完成”,
'返回'=>'标识',
);
如果($order->get_user_id()!==0){
$args['customer_id']=$order->get_customer_id();
}否则{
$args['customer']=$order->get_billing_email();
}
$customer\u has\u existing\u orders=wc\u get\u orders($args);
$orders\U count=count($customer\U拥有现有的\U订单);
$markData=((int)计数($customer\u拥有现有订单)>=2)
?数组('状态处理','返回客户')
:数组('status-on-hold','New Customer');
回声'

“.$markData[1]”。“.$orders\u count.”

'; }

但该代码不能正常工作。我总是看到客户已经回来了,他的所有订单都得到了考虑。但是,只有在两个状态为“已完成”的订单之后,才应标记用户正在退回客户,并且只应考虑状态为“已完成”的订单。现在看起来wc_get_orders函数不起作用。当我写:var_dump(wc_get_orders())时,我看到空值。

首先,你的文件夹名应该只被称为
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>';
        }
    }
}
/*
*插件名称:Kasha返回客户
*插件URI:
*描述:显示返回客户或新客户的信息,还显示已完成订单的数量。
*版本:1.0.0
*作者:我
*作者URI:
*许可证:GPLv2或更高版本
*/
if(在_数组('woocommerce/woocommerce.php'中,应用_过滤器('active_plugins',get_选项('active_plugins'))){
添加操作('woocommerce\u admin\u order\u data\u在\u order\u details'之后,'render\u customer\u是\u new\u字段');
函数render\u customer\u is\u new\u字段($order){
如果(是($order,'WC\u order')){
$args=数组(
“限制”=>-1,
“状态”=>“已完成”,
'返回'=>'标识',
);
如果($order->get\u user\u id()>0){
$args['customer_id']=$order->get_customer_id();
}否则{
$args['customer']=$order->get_billing_email();
}
$orders\u id=wc\u get\u orders($args);
$orders\u count=intval(count($orders\u id));
$markData=($orders_count>1)?数组('status-processing','Returning customer'):数组('status-on-hold','New customer');
回声'

“.$markData[1]”。“.$orders\u count.”

'; } } }

经过测试并适用于最后一个WooCommerce版本(并且应适用于自3.0以来的所有版本)。

状态应为以下值之一: “wc待定”、“wc处理”、“wc开启”、“wc完成”、“wc取消”、“wc退款”、“wc失败”


参考文献:

你能给我解释一下它是什么意思吗?它在数组('woocommerce/woocommerce.php')中的作用是什么?对我来说,这段代码不起作用(仍然写下客户正在退货(即使他们没有完成订单)清点所有订单,不仅仅是completed@KatharineKulikova第一行确保WooCommerce被激活…我已经测试了这个插件代码,它对我来说非常适合:在WooCommerce版本3.7和5.0上测试过…是的,你是对的,谢谢:)