当前位置: 首页 > 知识库问答 >
问题:

如何将第一个订单列添加到客户和客人的管理订单列表中

习淇
2023-03-14

我想在WooCommerce的“管理订单列表”页面中添加一栏,它通知我用户是否是第一次购买。

我认为这个“检查客户是否已经在WooCommerce购买了东西”可以用于我的案例。

但我不知道如何在WooCommerce的“订单”页面上添加它

共有1个答案

从元明
2023-03-14

使用manage\u edit-shop\u order\u列

通过wc_get_customer_order_count($user_id),您可以获得客户的订单总数。

注1:由于客人没有$user\u id,我们使用$billing\u email来确定当前和以前的订单。

注2:我部分使用了以下函数-CREDITS:@LoicTheAztec

那么你就可以

// Add a Header
function my_shop_order_column( $columns ) {
    // Add new column
    $columns['first_order'] = 'First order';

    return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'my_shop_order_column', 10, 1 );

// Populate the Column
function my_shop_order_list_column_content( $column, $post_id ) {
    // Compare
    if ( $column == 'first_order' ) {
        // Get order
        $order = wc_get_order( $post_id );

        // Get user id
        $user_id = $order->get_user_id();
        
        // Set variable
        $output = '';
        
        // Not a guest
        if ( $user_id > 0 ) {
            // Get the total orders by a customer.
            $count = wc_get_customer_order_count( $user_id );
        } else {
            // Guest 'user', don't have a user id so we will determine the previous orders based on the billing email
            
            // Get billing email
            $billing_email = $order->get_billing_email();
            
            if ( ! empty ( $billing_email ) ) {
                // Call function
                $count = has_guest_bought_by_email( $billing_email );
            }
        }
        
        // Output
        if ( $count == 1 ) {
            $output = 'First order';
        } elseif ( $count > 1 ) {
            $output = 'Total orders = ' . $count;
        }
        
        echo $output;
    }
}
add_action( 'manage_shop_order_posts_custom_column' , 'my_shop_order_list_column_content', 10, 2 );

// CREDITS: @LoicTheAztec - https://stackoverflow.com/a/46216073/11987538
function has_guest_bought_by_email( $email ) {
    global $wpdb;
    
    // Get all order statuses.
    $order_statuses = array_map( 'esc_sql', array_keys( wc_get_order_statuses() ) );

    $results = $wpdb->get_col( "
        SELECT p.ID FROM {$wpdb->prefix}posts AS p
        INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
        WHERE p.post_status IN ( '" . implode( "','", $order_statuses ) . "' )
        AND p.post_type LIKE 'shop_order'
        AND pm.meta_key = '_billing_email'
        AND pm.meta_value = '$email'
    " );

    // Return result
    return count( $results ); 
}
 类似资料:
  • 我想在Woocommerce的管理员查看订单页面上添加futured图像。已创建新列,但未显示产品图像。我应该如何显示订单缩略图?谢谢

  • 我正在为WooCommerce开发一个插件。我想覆盖admin的订单详细信息模板。我已经阅读了关于https://www.skyverge.com/blog/override-woocommerce-template-file-within-a-plugin/,但我仍然不明白如何覆盖admin的订单详细信息模板。以下是我的代码: 它不会在订单详细信息之后调用与

  • 提示 页面模板源码免费开源,在uni-app的插件市场uView的 示例项目 中,在右上角选择"使用 HBuilderX 导入示例项目" 或者 "下载示例项目ZIP", 在HX运行项目即可看到和使用模板。 该页面模板结合了uView的Tabs 标签组件,可以左右滑动。如果页面没有内容,会提示没有相关内容。 具体效果请查看示例,手机上查看效果会更好 ,用户可以根据自己的需求修改页面结构,逻辑,样式等

  • 我正在尝试使用Altova XMLSpy和XQuery1.0为每个客户返回最近的订单。 在SQL中,查询如下所示: 它返回16行,但我无法获得类似于XQuery中的工作。 我尝试了多种不同的代码,我认为我得到的最接近的代码是: 对于XML从MS Access导出的糟糕的标记名表示歉意。 请救命!提前道谢。 编辑:在尝试JoeMFB的解决方案后,当我只需要最近的(或最大日期)时,我会收到每个客户的所

  • 使用以下代码,我可以在WooCommerce产品上获得一个自定义字段,但是如何在订单、结帐和管理订单(后端)上显示它呢? 这是我在每个产品上的自定义字段 这是我的管理订单(后端)详细信息。我尝试显示我在每个产品帖子中输入的正确元数据。 如何在管理订单中显示我在自定义字段中输入的值?我也希望有人能帮助我显示在订单和结帐页面的元。。。或者引导我走向正确的方向。我意识到,为了在管理订单中显示它,我必须确

  • 订单列表       点击“订单列表”菜单,进入订单列表界面,可以看到我购买过的订单。