web-dev-qa-db-ja.com

WordPress管理者メニューの名前変更

「WooCommerce」の管理者メニュー名を「Store Settings」に変更しようとしています。

他のコードで記事の投稿名を変更するなどしてみましたが、WooCommerceでは機能しませんでした。

WooCommerceの管理メニュー機能は以下の通りです。

function woocommerce_admin_menu() {
    global $menu, $woocommerce;

    if ( current_user_can( 'manage_woocommerce' ) )
    $menu[] = array( '', 'read', 'separator-woocommerce', '', 'wp-menu-separator woocommerce' );

    $main_page = add_menu_page( __( 'WooCommerce', 'woocommerce' ), __( 'WooCommerce', 'woocommerce' ), 'manage_woocommerce', 'woocommerce' , 'woocommerce_settings_page', null, '55.5' );

    $reports_page = add_submenu_page( 'woocommerce', __( 'Reports', 'woocommerce' ),  __( 'Reports', 'woocommerce' ) , 'view_woocommerce_reports', 'woocommerce_reports', 'woocommerce_reports_page' );

    add_submenu_page( 'edit.php?post_type=product', __( 'Attributes', 'woocommerce' ), __( 'Attributes', 'woocommerce' ), 'manage_product_terms', 'woocommerce_attributes', 'woocommerce_attributes_page');

    add_action( 'load-' . $main_page, 'woocommerce_admin_help_tab' );
    add_action( 'load-' . $reports_page, 'woocommerce_admin_help_tab' );

    $wc_screen_id = strtolower( __( 'WooCommerce', 'woocommerce' ) );

    $print_css_on = apply_filters( 'woocommerce_screen_ids', array( 'toplevel_page_' . $wc_screen_id, $wc_screen_id . '_page_woocommerce_settings', $wc_screen_id . '_page_woocommerce_reports', 'toplevel_page_woocommerce', 'woocommerce_page_woocommerce_settings', 'woocommerce_page_woocommerce_reports', 'woocommerce_page_woocommerce_status', 'product_page_woocommerce_attributes', 'edit-tags.php', 'edit.php', 'index.php', 'post-new.php', 'post.php' ) );

    foreach ( $print_css_on as $page )
        add_action( 'admin_print_styles-'. $page, 'woocommerce_admin_css' );
}

add_action('admin_menu', 'woocommerce_admin_menu', 9);

以下のコードはメニュー名を変更するのに役立ちますが、CSSファイルが設定ページに正しくロードされない原因になります。

function change_woocommerce_menu_title( $translated )
{
    $translated = str_replace( 'WooCommerce', 'Store', $translated );
    $translated = str_replace( 'WooCommerce', 'Store', $translated );
    return $translated;
}
add_filter( 'gettext', 'change_woocommerce_menu_title' );
add_filter( 'ngettext', 'change_woocommerce_menu_title' );
4
Harish Chouhan

これが私がメニュー項目の名前を変更するためにすることです:アクションフックadmin_menuで、希望するメニューのキー位置を正確に示すために再帰的な配列検索を使い、そして次にグローバルな$menu配列を修正します。

add_action( 'admin_menu', 'rename_woocoomerce_wpse_100758', 999 );

function rename_woocoomerce_wpse_100758() 
{
    global $menu;

    // Pinpoint menu item
    $woo = recursive_array_search_php_91365( 'WooCommerce', $menu );

    // Validate
    if( !$woo )
        return;

    $menu[$woo][0] = 'Store Settings';
}

// http://www.php.net/manual/en/function.array-search.php#91365
function recursive_array_search_php_91365( $needle, $haystack ) 
{
    foreach( $haystack as $key => $value ) 
    {
        $current_key = $key;
        if( 
            $needle === $value 
            OR ( 
                is_array( $value )
                && recursive_array_search_php_91365( $needle, $value ) !== false 
            )
        ) 
        {
            return $current_key;
        }
    }
    return false;
}
5
brasofilo