Я хотел бы знать, как изменить порядок вкладок меню на странице «Моя учетная запись» в WooCommerce.
Я добавил новое меню под названием «Партнерская панель», используя следующий код ниже, но я хочу показать его перед меню «Выход», чтобы оно отображалось между меню «Сведения об учетной записи» и «Выйти».
Таким образом, порядок будет таким.
1- Панель управления
2- Заказы
3- Купоны
4- Адреса
5- Данные учетной записи
6- Партнерская панель
7- Выйти
Пожалуйста, смотрите скриншот.
//First hook that adds the menu item to my-account WooCommerce menu
function affiliate_home_link( $menu_links ){
// we will hook "womanide-forum" later
$new = array( 'affiliate-home' => 'Affiliate Dashboard' );
// or in case you need 2 links
// $new = array( 'link1' => 'Link 1', 'link2' => 'Link 2' );
// array_slice() is good when you want to add an element between the other ones
$menu_links = array_slice( $menu_links, 0, 5, true )
+ $new
+ array_slice( $menu_links, 5, NULL, true );
return $menu_links;
}
add_filter ( 'woocommerce_account_menu_items', 'affiliate_home_link' );
// Second Filter to Redirect the WooCommerce endpoint to custom URL
function affiliate_home_hook_endpoint( $url, $endpoint, $value, $permalink ){
if ( $endpoint === 'example-forum' ) {
// This is where you add the custom URL, it could be external like, in this case, we need to go to my profile on the bbpress froum
// I will use this function (bp_core_get_username( bp_loggedin_user_id() );) to get my profile user id and add it to the URL as shown below
$url = site_url() .'/affiliate-home/' . bp_core_get_username( bp_loggedin_user_id() );
}
return $url;
}
add_filter( 'woocommerce_get_endpoint_url', 'forum_example_hook_endpoint', 10, 4 );
Любая помощь будет оценена.
Спасибо!
Вы можете переставить свои $menu_items в той же функции следующим образом:
function affiliate_home_link( $menu_links ){
// Remove the logout menu item, will re-add later
$logout_link = $menu_links ['customer-logout'];
unset( $menu_links ['customer-logout'] );
$menu_links ['affiliate-home'] = __( 'Affiliate Dashboard', 'your-plugin-or-theme-textdomain' );
// Insert back the logout item.
$menu_links ['customer-logout'] = $logout_link;
return $menu_links;
}
add_filter ( 'woocommerce_account_menu_items', 'affiliate_home_link', 10, 1 );
Проверено работает: https://i.imgur.com/DM1eMWH.png
Добавление этого кода говорит о том, что я не могу повторно объявить ту же функцию «affiliate_home_link». Итак, какую функцию я должен использовать?
@HayderAllawi вы заменили свою функциюaffiliate_home_link на мою выше? Это то, что вы должны делать! Мой делает то же самое, что вы пытались добиться: добавьте кнопки партнерской панели и поместите их прямо перед выходом из системы.
Я не мог понять, что вы имеете в виду. Что-то не так с кодом, так как я не могу повторно объявить ту же функцию -->affiliate_home_link. Я попытался изменить функцию, но возникает та же ошибка.
«Я не могу повторно объявить одну и ту же функцию» => Это может произойти только в том случае, если вы пытаетесь использовать точное «имя» функции (в данном случае partner_home_link) более одного раза.
Если вы удалите свою функциюaffiliate_home_link и вместо нее будете использовать ту, которую я разместил выше, этой проблемы с повторным объявлением возникнуть не должно. Кроме того, с тем, что выше, вам больше не понадобится ваш. Имеет ли это смысл?
я изменил функцию в своем исходном коде и поместил ваш код, он не объявлял ошибку, но не работал.
Это странно, @HayderAllawi, я использовал это много раз и наверняка работает. Но я написал функцию выше, не тестируя ее. Я проверю его правильно и обновлю ответ, если он действительно не работает.
@HayderAllawi моя функция отлично работает как есть. Добавил его на сайт WooCommerce, и вот результат, с настраиваемой ссылкой на партнерскую панель прямо над ссылкой «Выйти»: i.imgur.com/DM1eMWH.png
Вы можете использовать настраиваемый фильтр и установить приоритеты для каждой конечной точки с нулевым приоритетом по умолчанию для каждой. Это был мой подход, когда мне нужно было настроить меню для ряда пользовательских элементов.
public function filter_woocommerce_account_menu_items( $items ) {
// Custom menu item
$items['quick-order-form'] = 'Quick Order Form';
// Sort based on priority
uksort( $items, function ( $a, $b ) {
$priority = [
'quick-order-form' => 4,
'customer-logout' => 5
];
// Check if priority has been set otherwise set to zero
$aPriority = $priority[ $a ] ?? 0;
$bPriority = $priority[ $b ] ?? 0;
// Equal priorities can stay where they are in the array
if ( $aPriority == $bPriority ) {
return 0;
}
// Adjust sort based on which endpoint has more priority
return ( $aPriority < $bPriority ) ? - 1 : 1;
} );
return $items;
}
add_filter ( 'woocommerce_account_menu_items', 'filter_woocommerce_account_menu_items' );
Дублировать: Изменить порядок пунктов меню в разделе Woocommerce My Account