【问题标题】:woocommerce buyers emails on frontendwoocommerce 买家在前端发送电子邮件
【发布时间】:2013-12-26 16:00:24
【问题描述】:

我已经使用 WordpressWooCommerce 插件创建了网站,并且我成功地让用户从前端发布产品,
我想显示产品订单

正如你在这张图片中看到的那样

i 成功显示产品的总销售额, 现在我想显示该产品的所有买家信息/

到目前为止我已经得到了这个代码

<?php

 $p = $post->ID;
 $args = array(
   'post_type' => 'shop_order',
   'post_status' => 'publish',
   'meta_key' => '_customer_user',
   'posts_per_page' => '-1'
 );

 $my_query = new WP_Query($args);
 $customer_orders = $my_query->posts;
 //print_r($customer_orders);
 foreach ($customer_orders as $customer_order) {
   $order = new WC_Order();
   $order->populate($customer_order);
   $orderdata = (array) $order;
   $fields = array_values($orderdata);
   //print_r($fields);
   echo 'Status: '.$fields[1];                           
   echo '<br>Date  : '.$fields[2];                           
   echo '<br>Email  : '.$fields[16];                           

 }

?>

此代码运行良好,但显示所有产品的详细信息

我想要的是:根据产品 ID 显示有关产品的信息

所以我想根据post-&gt;id编辑此代码以获取结果

$p = $post->ID;
     $args = array(
       'post_type' => 'shop_order',
       'post_status' => 'publish',
       'meta_key' => '_customer_user',
       'posts_per_page' => '-1'
     );

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    好的,所以阅读您的问题并假设 $post->ID 是您要显示包含的订单的产品的 ID,这就是您需要的:

    <?php
    $products = array();
    foreach (get_posts('post_type=shop_order&numberposts=-1&post_status=publish') as $order) {
        $order = new WC_Order($order->ID);
        foreach($order->get_items('line_item') as $item) {
            $product_id = (!empty($item['variation_id'])) ? $item['variation_id'] : $item['product_id'];
            $products[] = $product_id;
        }
        if (in_array($post->ID,$products)) {
            echo 'Status: '.$order->order_status;                         
            echo '<br>Date  : '.$order->order_date;                           
            echo '<br>Email  : '.$order->billing_email; 
        }   
    }
    

    【讨论】:

    • WC_Order 仅接受订单 ID 而非 $post-&gt;ID
    • 对不起,我阅读了第一个答案的 cmets 并认为它正在做你需要的事情,如果它是我的将是一个更简单的代码来做同样的事情。我刚刚重读了您的问题,我将重做我的代码
    • 谢谢你,等待你的代码
    • 它没有显示任何结果,即使我这样编写代码$products = array($post-&gt;ID); 它也会显示所有产品的所有订单,我只想显示产品的订单而不是所有订单。 @利亚姆
    • 对不起,我在代码中犯了错误 - line-item 而不是 line_item 我现在已经更正了
    【解决方案2】:

    如果我很好地理解了你的问题,也许你可以试试这个。但你必须确保$post 指的是订单。

    $p = $post->ID;
    
    $args = array(
        'p' => $p,
        'post_type' => 'shop_order',
        'post_status' => 'publish',
        'meta_key' => '_customer_user',
        'posts_per_page' => '-1'
    );
    
    $my_query = new WP_Query($args);
    
    if ( $my_query->have_posts() ) {
        $my_query->next_post();
        $customer_order = $my_query->post;      
    
        $order = new WC_Order();
        $order->populate($customer_order);
        $orderdata = (array) $order;
        $fields = array_values($orderdata);
        //print_r($fields);
        echo 'Status: '.$fields[1];                           
        echo '<br>Date  : '.$fields[2];                           
        echo '<br>Email  : '.$fields[16];       
    }
    

    您可以在此处阅读 WP_Query() 函数的文档:http://codex.wordpress.org/Class_Reference/WP_Query#Post_.26_Page_Parameters

    【讨论】:

    • 你的回答是的,你确实理解我的问题,我之前尝试过这个解决方案,但它不起作用@guillaume
    • @YoussefSubehi 你能检查我的编辑吗?您只有一种产品要展示?
    • @YoussefSubehi 如果还是不行,请准确描述错误。
    • 没有显示任何错误,只是在此视频中没有显示任何内容,我向您展示了,请看这里This Video@Guillaume Royer
    • 好的,我明白了! $p = $post-&gt;ID;product 的 ID,与 order 不同!因此,如果当然没有具有此 ID 且类型为“shop_order”的帖子。你没有办法获得 order ID 吗? (简而言之,将 $post 设置为 order 而不是第一行的 product。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2017-01-18
    • 2022-07-16
    • 2022-10-22
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多