Как добавлять/удалять/обновлять вкладки на странице «Мой аккаунт» в WooCommerce
Плагин 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' );
Добавить пользовательскую вкладку, которая ссылается на внутренний/внешний URL
/**
* Добавить новую пользовательскую ссылку на страницу «Мой аккаунт».
* @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/