问题描述
试图创建一个如下所示的自定义订单流程:
Looking to create a custom order process that looks like this:
我已经弄清楚了实现此目标所需的一切,除了如何让客户更改仪表盘中订单的状态外.我不需要他们编辑订单,只需批准付款捕获即可.
I have figured out everything i need to make this happen except for how to allow the customer to change the status of their order in the dashboard. I do not need them to edit the order, just approve it for payment capture.
我认为应该有一种简单的方法来使用自定义PHP代码以及Woocommerce Status Control之类的插件,但是我似乎找不到任何解决方案.
I think there should be an easy way to do this with custom PHP code in conjunction with a plugin like Woocommerce Status Control, but I can't seem to find a solution anywhere.
推荐答案
您可以使用以下代码来实现
You can use the following code that will:
- 将按钮文本视图"替换为通过批准"在我的帐户上>订单
- 显示一个自定义按钮以批准我的帐户"上的订单>订单视图(单个订单)
- 客户批准订单后显示自定义成功消息
这只会在具有特定状态的客户订单上发生.因此,您必须定义:
This will only happen on customer orders with a specific status. So you will have to define:
- 需要客户批准的订单状态.
- 反映客户批准的订单的订单状态(在3个功能上)
- 用于批准订单的按钮文字
- 客户批准订单后将显示的文字
- The order status that require an approval from customer.
- The order status that reflect an approved order by the customer (on the 3 functions)
- The button text for order approval
- The text that will be displayed once customer has approved the order
代码:
// My account > Orders (list): Rename "view" action button text when order needs to be approved
add_filter( 'woocommerce_my_account_my_orders_actions', 'change_my_account_my_orders_view_text_button', 10, 2 );
function change_my_account_my_orders_view_text_button( $actions, $order ) {
$required_order_status = 'processing'; // Order status that requires to be approved
if( $order->has_status($required_order_status) ) {
$actions['view']['name'] = __("Approve", "woocommerce"); // Change button text
}
return $actions;
}
// My account > View Order: Add an approval button on the order
add_action( 'woocommerce_order_details_after_order_table', 'approve_order_button_process' );
function approve_order_button_process( $order ){
// Avoiding displaying buttons on email notification
if( ! ( is_wc_endpoint_url( 'view-order' ) || is_wc_endpoint_url( 'order-received' ) ) ) return;
$approved_button_text = __("Approve this order", "woocommerce");
$required_order_status = 'processing'; // Order status that requires to be approved
$approved_order_status = 'completed'; // Approved order status
// On submit change order status
if( isset($_POST["approve_order"]) && $_POST["approve_order"] == $approved_button_text
&& $order->has_status( $required_order_status ) ) {
$order->update_status( $approved_order_status ); // Change order status
}
// Display a form with a button for order approval
if( $order->has_status($required_order_status) ) {
echo '<form class="cart" method="post" enctype="multipart/form-data" style="margin-top:12px;">
<input type="submit" class="button" name="approve_order" value="Approve this order" />
</form>';
}
}
// My account > View Order: Add a custom notice when order is approved
add_action( 'woocommerce_order_details_before_order_table', 'approved_order_message' );
function approved_order_message( $order ){
// Avoiding displaying buttons on email notification
if( ! ( is_wc_endpoint_url( 'view-order' ) || is_wc_endpoint_url( 'order-received' ) ) ) return;
$approved_order_status = 'completed'; // Approved order status
if( $order->has_status( $approved_order_status ) ) {
wc_print_notice( __("This order is approved", "woocommerce"), 'success' ); // Message
}
}
代码进入您的活动子主题(或活动主题)的functions.php文件中.经过测试,可以正常工作.
Code goes in functions.php file of your active child theme (or active theme). Tested and works.
在我的帐户"上>订单(列表):
On My account > Orders (list):
在我的帐户"上>订单视图(需要批准订单时):
On My account > Order view (when an order required to be approved):
在我的帐户"上>订单视图(客户批准订单后):
On My account > Order view (when customer has approved the order):
For order statuses, you can create custom order statuses with code or with plugins.
这篇关于允许客户更改WooCommerce我的帐户中的订单状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!