WooCommerce判断processing状态订单无匹配时输出异常问题求解
问题根源
你原有代码失效的核心原因是用错了方法:$order->has_status( 'processing' )是单个订单对象的实例方法,仅能判断你当前调用的那一个订单是否为processing状态,完全无法实现「检查全站是否存在processing状态待处理订单」的需求。
如果你把这段判断写在订单遍历循环里,当不存在processing状态订单时,循环根本不会执行,你写的else分支永远不会触发,自然出不来预期的提示内容。
实现代码
把以下代码加入主题functions.php文件或者自定义功能插件中,即可实现在管理员可见的WooCommerce订单页面展示对应提示:
add_action( 'admin_notices', 'render_admin_order_status_notice' ); function render_admin_order_status_notice() { // 仅在后台WooCommerce订单列表页加载提示 $current_screen = get_current_screen(); if ( $current_screen->id !== 'edit-shop_order' ) { return; } // 直接调用WooCommerce原生方法统计processing状态订单总数 $processing_order_total = wc_orders_count( 'processing' ); if ( $processing_order_total > 0 ) { // 有待处理订单时的提示,用WordPress后台原生通知样式 echo '<div class="notice notice-info"><p><strong>New Orders</strong></p></div>'; } else { // 无待处理订单时的提示 echo '<div class="notice notice-warning"><p><strong>No New Orders Today</strong></p></div>'; } }
逻辑说明
- 用WooCommerce内置的
wc_orders_count()方法直接统计指定状态的订单总数,不需要手写数据库查询,兼容WooCommerce各版本,不会出现逻辑判断失效的问题 - 增加页面判断逻辑,确保提示仅在管理员可见的订单列表页展示,不会在其他后台页面乱显示
- 输出采用WordPress后台原生通知组件样式,和系统后台UI风格统一,不会出现样式错乱
内容的提问来源于stack exchange,提问作者user2589071
相关产品推荐
相关产品推荐

