Назад к блогу

Как добавлять/удалять/обновлять вкладки на странице «Мой аккаунт» в WooCommerce

2022-02-053 минуты чтения

Плагин WooCommerce имеет доступный шорткод [woocommerce_my_account], который можно встроить на любую страницу, чтобы показать зарегистрированным клиентам всю информацию, связанную с их прошлыми заказами, адресами, платежными данными и многим другим, в зависимости от установленных плагинов на сайте. Шорткод выводит данные, организованные по вкладкам и уникальному контенту в каждой, как вы можете видеть на следующем изображении:

Страница «Мой аккаунт» по умолчанию

Как удалить, изменить или добавить новые вкладки?

Да, один из вариантов — использовать существующий плагин, а другой — написать несколько строк PHP. Ниже я приведу несколько фрагментов PHP, чтобы вы могли добавить их в свой файл functions.php и внести необходимые настройки. Мы используем следующие хуки фильтров WordPress: woocommerce_account_menu_items и woocommerce_get_endpoint_url


Удалить вкладки

/**
 * Удалить ссылку на предварительные заказы со страницы «Мой аккаунт».
 * @param $menu_links
 * @return array|string[]
 */
function my_site_remove_my_account_links( $menu_links ) {
    // Удалить вкладку предварительных заказов со страницы «Мой аккаунт».
    // Эта вкладка создается плагином https://woocommerce.com/products/woocommerce-pre-orders/
    unset( $menu_links['pre-orders'] );
    // Ниже вы можете найти стандартные вкладки.
    //unset( $menu_links['dashboard'] ); // Удалить вкладку «Панель управления».
    //unset( $menu_links['orders'] ); // Удалить вкладку «Заказы».
    //unset( $menu_links['edit-address'] ); // Вкладка «Адреса».
    //unset( $menu_links['payment-methods'] ); // Удалить вкладку «Способы оплаты».
    //unset( $menu_links['edit-account'] ); // Удалить вкладку «Детали аккаунта».
    //unset( $menu_links['customer-logout'] ); // Удалить ссылку на выход.
    return $menu_links;
}
add_filter ( 'woocommerce_account_menu_items', 'my_site_remove_my_account_links' );

Обновить заголовки вкладок

/**
 * Обновить заголовок вкладок на странице «Мой аккаунт».
 * @param $menu_links
 * @return array|string[]
 */
function my_site_update_my_account_links( $menu_links ) {
    // Обновить текст для вкладки «Заказы».
    $menu_links['orders'] = __('Мои прошлые заказы');
    // Ниже вы можете найти стандартные вкладки.
    // $menu_links['dashboard'] = __('Ваш пользовательский текст для панели управления'); // Обновить заголовок вкладки «Панель управления».
    // $menu_links['edit-address'] = __('Ваш пользовательский текст для адресов'); // Обновить заголовок вкладки «Адреса».
    // $menu_links['payment-methods'] =__('Ваш пользовательский текст для способов оплаты'); // Обновить заголовок вкладки «Адреса».
    // $menu_links['edit-account'] = __('Ваш пользовательский текст для аккаунта'); // Обновить заголовок вкладки «Адреса».
    // $menu_links['customer-logout'] = __('Ваш пользовательский текст для выхода'); // Обновить заголовок вкладки выхода.
    return $menu_links;
}
add_filter ( 'woocommerce_account_menu_items', 'my_site_update_my_account_links' );

/**
 * Добавить новую пользовательскую ссылку на страницу «Мой аккаунт».
 * @param $menu_links
 * @return array|string[]
 */
function my_site_add_my_account_links( $menu_links ) {
    // Раскомментируйте эти строки, если хотите отображать новую вкладку только для определенной роли.
    // Получить текущего пользователя.
    // $user = wp_get_current_user();
    // if ( !in_array( 'MY_ROLE', (array) $user->roles ) ) {
    //  return $menu_links;
    // }
    // customendpoint будет подключен через фильтр woocommerce_get_endpoint_url.
    $new = [ 'customendpoint' => __('Моя новая вкладка') ];
    return array_slice( $menu_links, 0, 1, true )
            + $new
            + array_slice( $menu_links, 1, NULL, true );
}
add_filter ( 'woocommerce_account_menu_items', 'my_site_add_my_account_links' );
/**
 * Установить URL для конечной точки customendpoint, созданной в woocommerce_account_menu_items
 * @param $url
 * @param $endpoint
 * @param $value
 * @param $permalink
 * @return mixed|string
 */
function my_site_custom_endpoint( $url, $endpoint, $value, $permalink ) {
    if ( $endpoint === 'customendpoint' ) {
        $url = '/internal-url/';
        // Вы также можете использовать внешний URL.
        // $url = 'https://davidloor.com';
    }
    return $url;
}
add_filter( 'woocommerce_get_endpoint_url', 'my_site_custom_endpoint', 10, 4 );

Полное объяснение страницы «Мой аккаунт» в WooCommerce можно найти по адресу:
https://woocommerce.com/document/the-my-account-page/