/ Плагины / Личный кабинет Woocommerce и все что с этим связано

Личный кабинет Woocommerce и все что с этим связано

HIT

16.03.2019

13236

3

Собираем различные полезные и интересные решения связанные с личным кабинетом Woocommerce, а также формой входа в ЛК.

Логин WC в шапке

Создаем функцию ссылки в личный кабинет WC

function my_account_loginout_link() {    

if (is_user_logged_in() ) {  
global $wp; 
$current_user = get_user_by( 'id', get_current_user_id() ); 
echo '<a class="nav-link" href="'. wp_logout_url( get_permalink( wc_get_page_id( 'shop' ) ) ) .'">выйти</a>'; echo '<strong><a class="nav-link" href="'. get_permalink( wc_get_page_id( 'myaccount' ) ) .'">'.$current_user->display_name.'</a></strong>';    
}   
elseif (!is_user_logged_in() ) {        
echo '<a class="nav-link" href="' . get_permalink( wc_get_page_id( 'myaccount' ) ) . '">Авторизация/Регистрация</a>';   
}

}

Выводим в любом месте сайта:

<?php my_account_loginout_link(); ?>

Пункты меню в личном кабинете

Удаляем любые из пунктов меню ЛК:

add_filter ( 'woocommerce_account_menu_items', 'misha_remove_my_account_links' );
function misha_remove_my_account_links( $menu_links ){
 
	//unset( $menu_links['edit-address'] ); // Addresses
	//unset( $menu_links['dashboard'] ); // Remove Dashboard
	//unset( $menu_links['payment-methods'] ); // Remove Payment Methods
	//unset( $menu_links['orders'] ); // Remove Orders
	//unset( $menu_links['downloads'] ); // Disable Downloads
	//unset( $menu_links['edit-account'] ); // Remove Account details tab
	//unset( $menu_links['customer-logout'] ); // Remove Logout link
 
	return $menu_links;
 
}

Переименование вкладок:

add_filter ( 'woocommerce_account_menu_items', 'misha_rename_downloads' );
 
function misha_rename_downloads( $menu_links ){
	$menu_links['downloads'] = 'My Files';
	return $menu_links;
}

Добавление произвольной вкладки с ссылкой:

add_filter ( 'woocommerce_account_menu_items', 'misha_one_more_link' );
function misha_one_more_link( $menu_links ){
 
	// we will hook "anyuniquetext123" later
	$new = array( 'anyuniquetext123' => 'Gift for you' );
 
	// 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, 1, true ) 
	+ $new 
	+ array_slice( $menu_links, 1, NULL, true );
 
 
	return $menu_links;
 
 
}
 
add_filter( 'woocommerce_get_endpoint_url', 'misha_hook_endpoint', 10, 4 );
function misha_hook_endpoint( $url, $endpoint, $value, $permalink ){
 
	if( $endpoint === 'anyuniquetext123' ) {
 
		// ok, here is the place for your custom URL, it could be external
		$url = '/favorite/';
 
	}
	return $url;
 
}

Добавление произвольной вкладки с содержимым:

// Add Link (Tab) to My Account menu
add_filter ( 'woocommerce_account_menu_items', 'misha_log_history_link', 40 );
function misha_log_history_link( $menu_links ){
 
	$menu_links = array_slice( $menu_links, 0, 5, true ) 
	+ array( 'log-history' => 'Log history' )
	+ array_slice( $menu_links, 5, NULL, true );
 
	return $menu_links;
 
}

// Register Permalink Endpoint
add_action( 'init', 'misha_add_endpoint' );
function misha_add_endpoint() {
 
	// WP_Rewrite is my Achilles' heel, so please do not ask me for detailed explanation
	add_rewrite_endpoint( 'log-history', EP_PAGES );
 
}

// woocommerce_account_{ENDPOINT NAME}_endpoint
add_action( 'woocommerce_account_log-history_endpoint', 'misha_my_account_endpoint_content' );
function misha_my_account_endpoint_content() {
 
	// of course you can print dynamic content here, one of the most useful functions here is get_current_user_id()
	echo 'Last time you logged in: yesterday from Safari.';
 
}

Чтобы вкладка заработала необходимо пересохранить Постоянные ссылки.

Чтобы изменить заголовок страницы личного кабинета используем функцию:

// Изменить заголовки страниц-вкладок в личном кабинете
function wpb_woo_endpoint_title( $title, $id ) {
    if ( is_wc_endpoint_url( 'favorites' ) && in_the_loop() ) {
        $title = "Избранное";
    }
    elseif ( is_wc_endpoint_url( 'orders' ) && in_the_loop() ) {
        $title = "My Orders";
    }
    elseif ( is_wc_endpoint_url( 'edit-account' ) && in_the_loop() ) {
        $title = "Change My Details2";
    }
    return $title;
}
add_filter( 'the_title', 'wpb_woo_endpoint_title', 10, 2 );

А чтобы фильтр is_wc_endpoint_url действовал на произвольные эндпоинты, то их нужно добавить к этому фильтру:

add_filter("woocommerce_get_query_vars", function ($vars) {
    foreach (["properties", "favorites", "help"] as $e) {
        $vars[$e] = $e;
    }
    return $vars;
});

Хуки до и после блока с вкладками

<? php 
add_action ( 'woocommerce_before_account_navigation' , 'misha_some_content_before' ) ;
function misha_some_content_before ( ) { 
	echo  'выводим что-либо до блока с вкладками' ;
} 
 
add_action ( 'woocommerce_after_account_navigation' , 'misha_some_content_after' ) ;
function misha_some_content_after ( ) { 
	?> 
	<p>выводим что-либо после блока с вкладками</ p> <? php }
[site-socialshare]
  • Комментарии
  • Вложения

Добавить комментарий

3 комментария

  1. Сергей

    Что-то ничего в текущей версии не работает

  2. Сергей

    Разобрался.
    Может кому-то понадобиться: если у вас ничего не работает, проверьте, не используется ли namespace в плагине. Если используется, не забудьте указать его (\namespace_name\function_name)

    1. Alexandr

      Спасибо за ценное примечание!

Личный кабинет Woocommerce и все что с этим связано
Выводим записи у которых нет миниатюры
Рекомендации для васВыводим записи у которых нет миниатюрыOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.