将产品缩略图添加到我的帐户-最近的订单-woocommerce

您需要编辑 templates/myaccount/my-orders.php .将以下代码添加到希望缩略图显示的位置。

<?php
// Get a list of all items that belong to the order
$products = $order->get_items();
// Loop through the items and get the product image
foreach( $products as $product ) {
$product_obj = new WC_Product( $product["product_id"] );
echo $product_obj->get_image();
}
?>

Woocommerce 获取订单信息

获取与woomerce插件(wordpress)上的订单相关联的数据

<?php
global $woocommerce;
$order = new WC_Order($order_id);
$order_shipping_total = $order->get_shipping();
echo $order_shipping_total;
?>


$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;
foreach ($customer_orders as $customer_order) {
$order = new WC_Order();
$order->populate($customer_order);
$orderdata = (array) $order;
// $orderdata Array will have Information. for e.g Shippin firstname, Lastname, Address ... and MUCH more.... Just enjoy!
}

woocommerce 订单列表

首先我们需要使用woocommerce的钩子,获取订单列表的数据:


global $woocommerce;
$customer_orders = get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
'numberposts' => $order_count,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => wc_get_order_types( 'view-orders' ),
'post_status' => array_keys( wc_get_order_statuses() ),
'posts_per_page' => 10,//每页显示10个
) ) );

然后我们建立一个循环,输出每一条订单的内容:

foreach ( $customer_orders as $customer_order ){
$order = wc_get_order( $customer_order );
$item_count = $order->get_item_count();
if( $order->get_status()!="completed"){//过滤未完成的订单
//此处输出订单的内容
echo $order->get_order_number();//订单号
echo wc_get_order_status_name( $order->get_status() );//订单状态
echo order_details_in($order->get_order_number());//下面的函数调用订单每个商品的简介
echo $item_count;//这个订单中一共有多少个商品
echo $order->get_formatted_order_total();//总金额
}}

上面的循环就可以将我们订单输出出来,你可以使用订单的状态进行过滤,将未完成的订单过滤出来。

如果你想要调用每一条订单下的产品简介信息 ,那么可以通过订单号进行调用,使用函数添加进入上面的循环

function order_details_in($order_number){
$order = wc_get_order( $order_number );//使用订单号获取信息
foreach( $order->get_items() as $item_id => $item ) {//开始循环
$product = apply_filters( 'woocommerce_order_item_product', $order->get_product_from_item( $item ), $item );
$is_visible = $product && $product->is_visible();
//获取产品信息
$image = get_the_post_thumbnail( $item['product_id'], apply_filters( 'single_product_small_thumbnail_size', 'shop_thumbnail' ), array('title' => $item['name'],'alt' => $item['name']) );//获取略缩图
$product_permalink = get_permalink( $item['product_id'] );//获取产品链接
echo $image;//输出产品的特色图片
echo $product_permalink//输出产品的链接
echo $item['name'];//产品名称
echo $item['qty'];//购买数量
};
return $order_details;
}

以上的代码是将可输出的内容都输出出来了,具体的样式和html结构还需要自己的去组件好。

将订单项添加到WooCommerce

我一直在努力将Chamber Dashboard插件与WooCommerce(WC)集成在一起,为我们的用户提供PayPal以外的其他付款方式。作为WC集成的一部分,我必须创建产品,订单并向订单中添加订单项,以显示来自我们插件的自定义信息。尽管有关WC的文档很多,但我不得不努力正确添加订单项。这特别困难,因为订单是从管理员端而不是由用户创建的。

成员管理器插件随附一个前端表单,用户可以使用该表单来首次注册其业务或在Chambers中续订其业务。无论哪种方式,当他们填写表格时,都会在后端创建一张发票,该发票会发送给使用支票或PayPal付款的用户。

由于我们将使用WC中设置的任何付款选项替换PayPal,因此用户在提交表单时将被带到订单页面。当商会决定使用WC付款时,填写表格后会同时创建订单和发票。但是默认情况下,此订单仅包含产品信息(此处的产品是已设置的成员资格级别)。

为什么这里需要订单项?

商会可以选择在前端表单中添加处理费,税金或捐赠金额字段,这些字段也需要添加到WC订单中。这些数字通常随每个订单而变化,因此在创建订单时(填写前端表单时)必须将它们添加到订单中。幸运的是,WC使用函数wc_add_order_item()可以轻松地向订单添加订单项。

以下是用于在WC中添加订单的函数。作为该过程的一部分,将调用wc_add_order_item()来创建带有表单信息的订单项。

在WooCommerce中创建新订单

//Create a new order in WooCommerce
function cdashmm_create_wc_order($address, $product_id, $total, $customer_id, $donation, $tax, $processing_fee){
if(cdashmm_check_mm_connected_to_wc()){
global $woocommerce;
$args = array(
'customer_id' => $customer_id,
'created_via' => 'Chamber Dashboard Recurring Payments',
'add_order_note' => 'Created via Chamber Dashboard Member Manager');
// Now we create the order
$order = wc_create_order($args);
// The add_product() function below is located in /plugins/woocommerce/includes/abstracts/abstract_wc_order.php
$order->add_product( wc_get_product($product_id), 1); // This is an existing SIMPLE product
$order->set_address( $address, 'billing' );
$order->set_created_via( $args['created_via'] );
$order->add_order_note( $args['add_order_note'] );
$order->set_total( $total );
$order->update_status("Completed", 'Imported order', TRUE);
$order_id = $order->get_id();
if($donation){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Donation', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $donation);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $donation);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
//wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate');
}
}
if($processing_fee){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Processing Fee', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $processing_fee);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $processing_fee);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
//wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate');
}
}
if($tax){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Tax', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $tax);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $tax);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
//wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate');
}
}
}
return $order_id;
}

在上面的函数中,为每个需要创建的订单项调用wc_add_order_item()。
例如,如果在前端表单上启用了捐赠字段,那么我想将捐赠金额作为订单中的行项目包括在内。

if($donation){
$item_id = wc_add_order_item($order_id, array('order_item_name' => __('Donation', 'cdashmm'), 'order_item_type' => 'fee'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_line_total', $donation);
wc_add_order_item_meta($item_id, '_line_tax', 0);
wc_add_order_item_meta($item_id, '_line_subtotal', $donation);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0);
}
}