在 Woocommerce 中,我想向我的帐户订单列表添加一个新列,并显示订购产品的名称和数量。
例如,我有这样的代码,它添加了一个显示订单名称的新列:
function sv_wc_add_my_account_orders_column( $columns ) {
$new_columns = array();
foreach ( $columns as $key => $name ) {
$new_columns[ $key ] = $name;
if ( 'order-status' === $key ) {
$new_columns['order-ship-to'] = __( 'Ship to', 'textdomain' );
}
}
return $new_columns;
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'sv_wc_add_my_account_orders_column' );
function sv_wc_my_orders_ship_to_column( $order ) {
$formatted_shipping = $order->get_name;
echo ! empty( $formatted_shipping ) ? $formatted_shipping : '–';
}
add_action( 'woocommerce_my_account_my_orders_column_order-ship-to', 'sv_wc_my_orders_ship_to_column' );
Run Code Online (Sandbox Code Playgroud)
如何更改它以显示订购产品的名称和数量?
我有一个包含另一个对象属性的对象,如下所示:
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
@JsonPropertyOrder({"fA1","b","fA2"})
@Data
public class A {
private String fA1;
private String fA2;
@JsonUnwrapped
private B b = new B();
@Data
class B {
private String fB1;
private String fB2;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
A a = new A ();
System.out.println(objectMapper.writeValueAsString(a));
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是生成尊重这个顺序的json:
{
"fA1":"",
"fB1":"",
"fA2":"",
"fB2":""
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点吗?
如何通过订单号(而不是 ID)获取 WooCommerce 订单?
我尝试将 wc_get_orders 与自定义参数一起使用,例如:
wc_get_orders( array( 'number' => '1000' ) );
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
谢谢!
如何更改 WooCommerce 中最近订单表中的列标题文本?
见附图
我的主题中的模板文件myaccount/my-orders.php包含:
<?php
/**
* My Orders - Deprecated
*
* @deprecated 2.6.0 this template file is no longer used. My Account shortcode uses orders.php.
* @package WooCommerce\Templates
*/
defined( 'ABSPATH' ) || exit;
$my_orders_columns = apply_filters(
'woocommerce_my_account_my_orders_columns',
array(
'order-number' => esc_html__( 'Order', 'woocommerce' ),
'order-date' => esc_html__( 'Date', 'woocommerce' ),
'order-status' => esc_html__( 'Status', 'woocommerce' ),
'order-total' => esc_html__( 'Total', 'woocommerce' ),
'order-actions' => ' ',
)
);
$customer_orders = get_posts(
apply_filters(
'woocommerce_my_account_my_orders_query',
array(
'numberposts' …Run Code Online (Sandbox Code Playgroud) 您好,我正在尝试在 mu 插件中创建一个功能,以防止某些用户将订单状态从特定订单状态更改为特定订单状态。
我到处寻找,尝试了很多不同的方法,但似乎没有任何效果。
实际上该函数是使用woocommerce_order_status_changed动作钩子运行的。问题是这个钩子在订单状态已经改变之后运行,这导致了无限循环。
我发现的最有用的钩子似乎是woocommerce_before_order_object_save.
我在 WooCommerce Github 上发现了“添加附加参数以防止调用‘woocommerce_order_status_changed’”有用的相关线程。
我尝试使用@kloon代码片段解决方案:
add_filter( 'woocommerce_before_order_object_save', 'prevent_order_status_change', 10, 2 );
function prevent_order_status_change( $order, $data_store ) {
$changes = $order->get_changes();
if ( isset( $changes['status'] ) ) {
$data = $order->get_data();
$from_status = $data['status'];
$to_status = $changes['status'];
// Do your logic here and update statuses with CRUD eg $order->set_status( 'completed' );
// Be sure to return the order object
}
return $order;
}
Run Code Online (Sandbox Code Playgroud)
但$changes变量始终是一个空数组。
我尝试使用 …
我需要促销/优惠券按顺序改变哪个项目的信息以及折扣前这个项目的价格和这个项目的最终价格.我知道,这很复杂所以这是一个例子:
<order>
<items>
<item> <!-- This item have discount in order -->
<sku>1234</sku>
<promotion>
<promo_id>456</promo_id>
<discount_value>10</discount_value><!-- In % or $ -->
</promotion>
<final_price>25</final_price>
</item>
<item><!-- This item don't have discount in order -->
<sku>1234</sku>
<promotion/>
<final_price>35</final_price>
</item>
</items>
</order>
Run Code Online (Sandbox Code Playgroud)
我希望这是可以理解的解释.谢谢你的帮助.
编辑:我忘了一件事.所有我都有来自销售/订单模型的信息.这是一个接口,所以我无法访问会话数据,我从数据库获得验证的订单.
我想在我的 woocommerce 网站上首次订购后向自动注册的客人发送重置密码的电子邮件。
这是我的钩子函数:
function wc_register_guests($order_id) {
// get all the order data
$order = new WC_Order($order_id);
//get the user email from the order
$order_email = $order->billing_email;
// check if there are any users with the billing email as user or email
$email = email_exists($order_email);
$user = username_exists($order_email);
// if the UID is null, then it's a guest checkout
if ($user == false && $email == false) {
$random_password = wp_generate_password();
// create new user with email as username & …Run Code Online (Sandbox Code Playgroud) 我有一个灵活的问题,但没有得到任何答案。我在 Woocommerce 结帐字段中使用“结帐字段编辑器”添加了自定义字段。该字段如下所示,似乎工作正常。
<input class="input-text " name="wc_order_field_7542" id="wc_order_field_7542" placeholder="Pickup Date" value="" type="text">
Run Code Online (Sandbox Code Playgroud)
然而,现在我正在开发一个插件,想要获取在这个特定字段中输入的值,但似乎无法弄清楚。对于其他字段,我只需执行以下操作,就像我为“计费电子邮件”所做的那样,并且它正在工作:
public function get_billing_email() {
$billing_email = $this->order->billing_email;
return apply_filters( 'xc_woo_cloud_print_billing_email', $billing_email, $this );
}
public function billing_email() {
echo $this->get_billing_email();
}
Run Code Online (Sandbox Code Playgroud)
我确信我忘记了一些事情并且没有做正确的事情。
任何帮助表示赞赏。
嗨,我正在学习PHP和Woocommerce!我正在尝试获取所有具有状态处理的订单和每个订单的总数,并在页面上显示.
到目前为止,我可以遍历所有订单并获取每个订单的名称和数量.
但由于我不知道列表中的哪个产品,我不确定如何比较名称然后添加数量.
我目前的输出是这样的:
prod1 - v1 x 1
Prod2 - v3 x 1
prod2 - v3 x 1
prod3 - v2 x 11
prod3 - v2 x 1
我想要的是:
prod1 - v1 x 1
Prod2 - v3 x 2
prod3 - v2 x 12
目前的代码是:
<?php
/*
Template Name: Print Supplier Order
*/
if (!is_user_logged_in() || !current_user_can('manage_options')) wp_die('This page is private.');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><?php _e('Processing Orders'); ?></title>
<style>
body { background:white; …Run Code Online (Sandbox Code Playgroud) 我正在使用Woocommerce开发一个电子商务网站,我希望将定制状态设置为“已发货”。
因此,流程是这样的:客户下订单收到一封电子邮件,指出订单已确认,当前状态为处理中,管理员从其快递员那里获取跟踪ID,可以将其粘贴到新部分并将订单状态更改为已发货。这会向客户发送另一封带有跟踪ID的电子邮件。
是否有任何自定义代码可以帮助我实现此功能?
任何帮助将不胜感激。
在woocommerce中,在“收到订单”页面(“谢谢”页面)上,产品图像未显示在订单项中。
如何在“已收到订单”页面上的订单项中显示产品图片?
是否有可用的挂钩?
还是我必须覆盖模板order/order-details-item.php文件?
任何帮助表示赞赏。
我正在开发 WooCommerce 项目。我需要根据自定义表中的订购项目添加一些条目。如果用户订购了 3 个商品,那么这 3 个条目将与我的自定义表中的一些数据一起放置。
为此我使用了woocommerce_checkout_order_processed钩子。但我遇到了一些问题,如果用户在购物车和结账页面添加 4 件商品,如果用户删除了除一件商品之外的所有商品,最后只订购了 1 件商品,那么在这个钩子中我也得到了所有 4 件商品。我没有在这个钩子中得到最终订购的物品。
所以我把钩子改成了woocommerce_thankyou. 但在某些情况下,由于某种原因,用户没有进入感谢页面或某些信用卡付款,此挂钩不起作用。
那么谁能告诉我最好的钩子,它可以在订单下达后运行,无论付款是否完成,而且我应该只得到订购的物品。我的 WooCommerce 版本是 3+
代码 :
function wc_function($order_id) {
global $wpdb;
$order = new WC_Order($order_id);
$items = $order->get_items();
foreach ($items as $item_line_id => $item) {
// Insert data in my custom table
}
}
//add_action('woocommerce_checkout_order_processed','wc_function', 10, 3);
//add_action('woocommerce_thankyou', 'wc_function', 10, 1);
Run Code Online (Sandbox Code Playgroud)
谢谢 !
我已经使用此文档以编程方式创建了优惠券 -> https://docs.woocommerce.com/document/create-a-coupon-programatically/
效果很好,完成订单后生成一个动态优惠券代码。但我想只允许该订购产品的优惠券代码。
所以在上面的代码这里:
update_post_meta( $new_coupon_id, 'product_ids', '' );
我想使用该订单商品 ID 获取该订单产品 ID。
所以任何人都知道解决方案,然后请帮助我。
谢谢,凯坦。