Как изменить навигационное меню на странице "Мой аккаунт" в WooCommerce

26 июл. 2017 г., 09:39:08
Просмотры: 77.1K
Голосов: 13

Я хочу изменить боковое навигационное меню "Мой аккаунт" в WooCommerce.

Для этого я внес изменения в woocommerce/templates/myaccount/navigation.php. Проблемы с таким подходом:

  • Я могу добавлять новые пункты только в начало или конец меню. Но мне нужно разместить их на 2-й и 3-й позиции...
  • При обновлении WC файл может измениться...

Какой наилучший способ настроить навигационное меню "Мой аккаунт" в WooCommerce под свои нужды?

Навигационное меню Мой аккаунт в WooCommerce

1
Комментарии

Более подробный ответ здесь: https://github.com/woocommerce/woocommerce/wiki/Customising-account-page-tabs

Zhi V Zhi V
28 мая 2018 г. 17:04:21
Все ответы на вопрос 2
2
28

Для этого вам не нужно изменять файл woocommerce/templates/myaccount/navigation.php.

Лучший способ настроить пункты меню навигации "Мой аккаунт" — это использовать:

  • Фильтр woocommerce_account_menu_items для добавления новых пунктов в меню.
  • Функцию array_slice() для переупорядочивания пунктов так, как вам нужно.

Таким образом, используя фильтр woocommerce_account_menu_items, вы идеально интегрируете свои собственные пункты в WooCommerce, так как:

  • Есть возможность переопределить конечные точки (endpoints) ваших пунктов через страницу настроек "Аккаунт" в WC.
  • WC автоматически обновляет URL ссылок пунктов, например, при изменении структуры постоянных ссылок.

Пример кода:

// Обратите внимание на низкий приоритет хука, это даст другим плагинам время добавить свои пункты...
add_filter( 'woocommerce_account_menu_items', 'add_my_menu_items', 99, 1 );

function add_my_menu_items( $items ) {
    $my_items = array(
    //  конечная точка => метка
        '2nd-item' => __( '2nd Item', 'my_plugin' ),
        '3rd-item' => __( '3rd Item', 'my_plugin' ),
    );

    $my_items = array_slice( $items, 0, 1, true ) +
        $my_items +
        array_slice( $items, 1, count( $items ), true );

    return $my_items;
}

Примечание 1: URL-адрес ссылок ваших пунктов автоматически определяется WooCommerce здесь. Для этого WC просто добавляет конечную точку, определённую в фильтре выше, к URL страницы "Мой аккаунт". Поэтому корректно указывайте конечные точки для своих пунктов.

Примечание 2: В вашем вопросе кажется, что вы изменили шаблон WooCommerce напрямую в ядре...
woocommerce/templates/myaccount/navigation.php
Если вам необходимо изменить шаблон WC, правильный способ — скопировать путь шаблона относительно папки woocommerce/templates в папку woocommerce вашей темы/плагина. Например, в нашем случае шаблон нужно вставить в:
child-theme/woocommerce/myaccount/navigation.php.

16 авг. 2017 г. 18:04:43
Комментарии

Привет, я пробую этот метод, добавляя код в functions.php, но ссылки появляются только в верхней навигации, а не в боковом меню. Есть какие-то предложения?

alexcr alexcr
21 мая 2020 г. 17:20:12

@alexcr И боковая панель, и заголовок обрабатываются вашей темой, а не плагином WC. WC просто предоставляет шаблоны и хуки, которые разработчики тем и интеграторы могут включать или нет.

ClemC ClemC
25 мая 2020 г. 09:36:23
1

Кастомизация аккаунта WooCommerce и добавление новых элементов состоит из нескольких шагов:

Первый шаг: Создание ссылок:

Необходимо использовать фильтр woocommerce_account_menu_items для изменения существующих пунктов меню или добавления новых. Например, я добавляю пункт под названием Избранное:

add_filter( 'woocommerce_account_menu_items', function($items) {
    $items['wishlist'] = __('Избранное', 'textdomain');

    return $items;
}, 99, 1 );

Примечание: Я показал самый простой способ. Вы можете использовать array_slice, если хотите разместить пункт меню в нужной позиции.

P.S: Если нужно удалить или изменить существующие пункты, делается это так:

add_filter( 'woocommerce_account_menu_items', function($items) {
    unset($items['downloads']); // Удаляем пункт "Загрузки"
    $items['orders'] = __('Мои заказы', 'textdomain'); // Меняем название для "Заказы"

    return $items;
}, 99, 1 );

Шаг 2: Добавление rewrite endpoints:

Для каждого добавляемого пункта нужно создать endpoint:

add_action( 'init', function() {
    add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES );
    // Повторите строку выше для других пунктов ...
} );

После добавления новых endpoints необходимо сбросить правила перезаписи. Это можно сделать, перейдя в wp-admin/settings/permalinks и нажав кнопку сохранить, либо с помощью функции flush_rewrite_rules().

Шаг 3: Отображение содержимого нового пункта

Для отображения содержимого новых пунктов используйте хук woocommerce_account_{myEndPoint}_endpoint. В нашем примере я создал файл wishlist.php в директории темы woocommerce/myaccount/ и вывожу его содержимое так:

add_action( 'woocommerce_account_wishlist_endpoint', function() {
    wc_get_template_part('myaccount/wishlist');
});
18 июн. 2020 г. 21:37:01
Комментарии

Также полезно использовать функцию register_activation_hook() для регистрации метода активации, который будет вызывать flush_rewrite_rules(), чтобы избежать многократной очистки правил при каждой загрузке страницы и чтобы не нужно было запоминать о необходимости сохранять постоянные ссылки. Таким образом, это сработает только один раз при активации и будет "просто работать". Не забудьте выполнить add_rewrite_endpoint() перед этим, чтобы он зарегистрировался.

Rick Mac Gillis Rick Mac Gillis
11 мая 2024 г. 01:29:41