在WooCommerce中,当订单处于处理状态时,我希望在“我的帐户”页面上显示一个操作按钮,允许客户通过更改订单状态以完成来确认订单已经到达。
我已经看到允许客户通过电子邮件相关的问题代码改变订单的状态(没有答案),这并没有真正帮助实现我的目标。
客户是否可以通过将订单状态更改为“已完成”来确认订单是否已到达?
您可以使用woocommerce_my_account_my_orders_actions
向“我的帐户”订单部分添加一个自定义操作按钮,用于“处理”状态的订单(也可以查看订单)。
然后使用template_redirection
钩子,客户可以更改一个处理订单的状态,显示成功通知。
代码:
// The button Url and the label
function customer_order_confirm_args( $order_id ) {
return array(
'url' => wp_nonce_url( add_query_arg( 'complete_order', $order_id ) , 'wc_complete_order' ),
'name' => __( 'Approve order', 'woocommerce' )
);
}
// Add a custom action button to processing orders (My account > Orders)
add_filter( 'woocommerce_my_account_my_orders_actions', 'complete_action_button_my_accout_orders', 50, 2 );
function complete_action_button_my_accout_orders( $actions, $order ) {
if ( $order->has_status( 'processing' ) ) {
$actions['order_confirmed'] = customer_order_confirm_args( $order->get_id() );
}
return $actions;
}
// Add a custom button to processing orders (My account > View order)
add_action( 'woocommerce_order_details_after_order_table', 'complete_action_button_my_accout_order_view' );
function complete_action_button_my_accout_order_view( $order ){
// Avoiding displaying buttons on email notification
if( is_wc_endpoint_url( 'view-order' ) ) {
$data = customer_order_confirm_args( $order->get_id() );
echo '<div style="margin:16px 0 24px;">
<a class="button" href="'.$data['url'].'">'.$data['name'].'</a>
</div>';
}
}
// Change order status and display a message
add_action( 'template_redirect', 'action_complete_order_status' );
function action_complete_order_status( $query ) {
if ( ( is_wc_endpoint_url( 'orders' )
|| is_wc_endpoint_url( 'view-order' ) )
&& isset( $_GET['complete_order'] )
&& $_GET['complete_order'] > 1
&& isset($_GET['_wpnonce'])
&& wp_verify_nonce($_GET['_wpnonce'], 'wc_complete_order') )
{
$order = wc_get_order( absint($_GET['complete_order']) );
if ( is_a($order, 'WC_Order') ) {
// Change order status to "completed"
$order->update_status( 'completed', __('Approved by the customer', 'woocommerce') ) ;
// Add a notice (optional)
wc_add_notice( sprintf( __( 'Order #%s has been approved', 'woocommerce' ), $order->get_id() ) );
// Remove query args
wp_redirect( esc_url( remove_query_arg( array( 'complete_order', '_wpnonce' ) ) ) );
exit();
}
}
}
代码放在您的活动子主题(或活动主题)的functions.php文件中。经过测试并起作用。
相关(旧答案):允许客户更改WooCommerce My account中的订单状态
我WooCommerce,我正在使用“更改管理付款状态返回到WoocommercePending order status unpayed for WoocommercePending”答案代码,当订单状态在后端手动更改为pending时,重置订单的已付款状态。 例如,如果订单状态从“完成”更改为“挂起”,则删除以下内容:“支付日期为4月2日,2019年@5:29 PM” 现在我这里的问题是在订单
当客户通过Ajax单击thank you页面上的一个按钮时,我正在尝试将woocommerce订单的状态从processing更改为completed。 我的代码如下: 和我的functions.php中的php 我知道ajax在没有语句的情况下可以正常工作,但使用它,我会得到一个500内部服务器错误。我还知道,如果我不使用ajax并将其挂到thank you页面中,那么它就会毫无问题地更改状态。
我的目标是允许特定角色查看商店中的任何订单。虽然在“我的帐户”页面中显示所有订单相对容易,但访问不同用户创建的特定订单总是以“无效订单。我的帐户”错误结束。 到目前为止,我已经在filter中添加了自定义查询,这样就可以查看具有相同角色的帐户所做的所有订单。我将角色权限设置为完全权限(根据此链接,权限与店铺经理和管理员相同,但默认情况下这些角色也无法查看所有订单:https://github.co
大家好,我通过搜索并找到解决方案,对我在woocommerce上的结帐进行了一些编辑。 到目前为止,我已经做到了,所以我跳过购物车/篮子,直接去结账,并重命名了订单笔记文件。 我正在挣扎的是如何将订单注释字段移动到订单评论上方。我知道我需要使用这个woocommerce_checkout_before_order_review但我不知道如何使用。任何帮助都会很棒吗?
我正试图阻止woo-commerce发送邮件时,订单状态更改。这些订单是亚马逊的,我的插件从亚马逊同步到Woo-Commerce。在这样做的时候,亚马逊和woo-commerce的邮件都收到了,这激怒了客户。因此,我想停止电子邮件功能停止时,状态从我的插件更改。要更改状态的代码是 有没有可以设置的标志来避免发送邮件? 任何种类的帮助都是非常感谢的。
我创建了一个自定义电子邮件类并将其添加到Woocommerce中。当我转到WooCommerce中的电子邮件设置时,我可以在那里看到我的模板,当我手动触发它时,电子邮件就会到达目标电子邮件帐户。现在我遇到的问题是,我在我的类中添加了一个动作,该动作应该检测订单状态更改,并在订单被设置为我的自定义状态时执行我的触发器功能: add_action('woocommerce_order_status_w