Php 如何在Woocommerce中的自定义订单状态的管理菜单中添加计数?

Php 如何在Woocommerce中的自定义订单状态的管理菜单中添加计数?,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,因此,我添加了一个名为“等待发货”的自定义订单状态,我希望将这些订单包括在管理左侧WooCommerce下拉菜单下显示的订单计数中。 显示的唯一订单是具有“处理”状态的订单 有什么帮助吗,伙计们?提前多谢。我找到了一个公平的解决办法。有点黑。。。但它是有效的 首先,将子菜单添加到电子商务菜单: add_action( 'admin_menu', 'custom_status_menu', 50 ); function custom_status_menu(){ $status_page

因此,我添加了一个名为“等待发货”的自定义订单状态,我希望将这些订单包括在管理左侧WooCommerce下拉菜单下显示的订单计数中。 显示的唯一订单是具有“处理”状态的订单


有什么帮助吗,伙计们?提前多谢。

我找到了一个公平的解决办法。有点黑。。。但它是有效的

首先,将子菜单添加到电子商务菜单:

add_action( 'admin_menu', 'custom_status_menu', 50 );
function custom_status_menu(){
    $status_page = add_submenu_page( 'woocommerce', 'Awaiting Shipment', __( 'Awaiting', 'woocommerce' ), 'manage_woocommerce', 'wc-awaiting', 'awaiting_orders_page' );
}
然后,添加单击此菜单项时要运行的函数。此函数(这里是hacky部分)将用户重定向到常规订单页面,仅显示请求的状态。(对于测试,我使用了“取消”状态,您应该更改该状态)

最后,添加计数器这里也一样,我使用了“等待”状态,将其更改为您创建的状态

add_action( 'admin_head', 'add_custom_status_count');
function add_custom_status_count(){
    global $submenu;
    $order_count = wc_orders_count( 'awaiting' );
    foreach ( $submenu['woocommerce'] as $key => $menu_item ) {
        if ( 0 === strpos( $menu_item[0], 'Awaiting' ) ) {
            $submenu['woocommerce'][ $key ][0] .= ' <span class="awaiting-mod update-plugins count-' . esc_attr( $order_count ) . '"><span class="processing-count">' . number_format_i18n( $order_count ) . '</span></span>'; // WPCS: override ok.
            break;
        }
    }
}
add_操作('admin_head','add_custom_status_count');
函数添加\自定义\状态\计数(){
全局$子菜单;
$order_count=wc_orders_count('waiting');
foreach($子菜单['woocommerce']作为$key=>$菜单项){
if(0==strpos($menu_项[0],'waiting')){
$submenu['woocmerce'][$key][0]。=''.number\u format\u i18n($order\u count)。'';//WPCS:覆盖确定。
打破
}
}
}

如果您想完全替换默认计数器,下面的代码段应该适合您的需要:

<?php
add_action( 'admin_head', 'usrlnd_action_change_order_counter' ), 999 );
function usrlnd_action_change_order_counter() {
    global $submenu;

    if ( isset( $submenu['woocommerce'] ) ) {
        // Add count if user has access.
        if ( apply_filters( 'woocommerce_include_processing_order_count_in_menu', true ) && current_user_can( 'manage_woocommerce' ) ) {
            // my custom status slug is `new`
            $order_count     = wc_orders_count( 'new' );
            $old_order_count = wc_processing_order_count();

            if ( $order_count ) {
                foreach ( $submenu['woocommerce'] as $key => $menu_item ) {
                    if ( 0 === strpos( $menu_item[0], _x( 'Orders', 'Admin menu name', 'woocommerce' ) ) ) {
                        $old  = ' <span class="awaiting-mod update-plugins count-' . esc_attr( $old_order_count ) . '"><span class="processing-count">' . number_format_i18n( $old_order_count ) . '</span></span>';
                        $new  = ' <span class="awaiting-mod update-plugins count-' . esc_attr( $order_count ) . '"><span class="processing-count">' . number_format_i18n( $order_count ) . '</span></span>';
                        $item = $submenu['woocommerce'][ $key ][0];
                        if ( strpos( $item, $old ) !== false ) {
                            // replace old counter with new
                            $item = str_replace( $old, $new, $item );
                        } else {
                            // there is no counter, just add the new
                            $item .= $new;
                        }

                        $submenu['woocommerce'][ $key ][0] = $item;
                        break;
                    }
                }
            }
        }
    }
}

是的,这不是最自然的解决方案,但效果很好。非常感谢!
<?php
add_action( 'admin_head', 'usrlnd_action_change_order_counter' ), 999 );
function usrlnd_action_change_order_counter() {
    global $submenu;

    if ( isset( $submenu['woocommerce'] ) ) {
        // Add count if user has access.
        if ( apply_filters( 'woocommerce_include_processing_order_count_in_menu', true ) && current_user_can( 'manage_woocommerce' ) ) {
            // my custom status slug is `new`
            $order_count     = wc_orders_count( 'new' );
            $old_order_count = wc_processing_order_count();

            if ( $order_count ) {
                foreach ( $submenu['woocommerce'] as $key => $menu_item ) {
                    if ( 0 === strpos( $menu_item[0], _x( 'Orders', 'Admin menu name', 'woocommerce' ) ) ) {
                        $old  = ' <span class="awaiting-mod update-plugins count-' . esc_attr( $old_order_count ) . '"><span class="processing-count">' . number_format_i18n( $old_order_count ) . '</span></span>';
                        $new  = ' <span class="awaiting-mod update-plugins count-' . esc_attr( $order_count ) . '"><span class="processing-count">' . number_format_i18n( $order_count ) . '</span></span>';
                        $item = $submenu['woocommerce'][ $key ][0];
                        if ( strpos( $item, $old ) !== false ) {
                            // replace old counter with new
                            $item = str_replace( $old, $new, $item );
                        } else {
                            // there is no counter, just add the new
                            $item .= $new;
                        }

                        $submenu['woocommerce'][ $key ][0] = $item;
                        break;
                    }
                }
            }
        }
    }
}