如何移除WooCommerce后台订单页非处理/完成状态的付款信息
WooCommerce后台订单付款信息状态关联显示解决方案
WooCommerce默认仅在订单标记为付款成功时写入
_paid_date等付款相关元字段,后续订单状态变更不会自动清空或隐藏这些字段的展示,因此会出现状态回退后付款信息残留的问题。
方案1:动态过滤后台显示内容(推荐,不修改原始数据)
直接通过WordPress过滤器控制付款信息的可见性,不改动订单原有存储数据,避免数据丢失风险。
将以下代码添加到你的主题functions.php文件或自定义功能插件中:
// 隐藏非处理中/已完成订单的Paid on付款时间显示 add_filter( 'woocommerce_admin_order_paid_display', 'custom_hide_paid_info_for_non_paid_status', 10, 2 ); function custom_hide_paid_info_for_non_paid_status( $paid_display, $order ) { // 允许显示付款信息的状态列表 $allowed_statuses = array( 'processing', 'completed' ); if ( ! in_array( $order->get_status(), $allowed_statuses ) ) { return ''; } return $paid_display; } // 隐藏非处理中/已完成订单的IP等付款相关账单字段 add_filter( 'woocommerce_admin_order_billing_address_fields', 'custom_hide_payment_meta_for_non_paid_status', 10, 2 ); function custom_hide_payment_meta_for_non_paid_status( $fields, $order ) { $allowed_statuses = array( 'processing', 'completed' ); if ( ! in_array( $order->get_status(), $allowed_statuses ) ) { // 移除IP地址字段,如有其他需要隐藏的字段可一并unset unset( $fields['ip_address'] ); } return $fields; }
如果需要同时隐藏更多付款相关字段,可以在第二个钩子的判断逻辑里追加对应字段的unset操作即可,你之前针对BACS和本地自提修改"Paid on"文本的自定义代码可以和该方案兼容,无需调整原有修改。
方案2:状态回退时自动清空付款元数据
如果需要彻底清除回退状态订单的付款相关存储数据,可以使用订单状态变更钩子触发元数据删除操作:
add_action( 'woocommerce_order_status_changed', 'custom_clear_payment_meta_on_status_backward', 10, 3 ); function custom_clear_payment_meta_on_status_backward( $order_id, $old_status, $new_status ) { $order = wc_get_order( $order_id ); $allowed_statuses = array( 'processing', 'completed' ); // 当从允许显示付款的状态切换到其他状态时,清空付款相关元数据 if ( in_array( $old_status, $allowed_statuses ) && ! in_array( $new_status, $allowed_statuses ) ) { // 删除付款时间 $order->delete_meta_data( '_paid_date' ); // 删除用户IP $order->delete_meta_data( '_customer_ip_address' ); // 如有其他需要清空的付款元字段可在此处追加删除逻辑 $order->save(); } }
注意:该方案会永久删除订单的对应元数据,操作不可逆,建议测试无误后再在生产环境使用。
内容的提问来源于stack exchange,提问作者Giuseppe V
相关产品推荐
相关产品推荐

