WooCommerce: показывать ссылку «Моя учетная запись» только для указанной роли пользователя c - PullRequest
0 голосов
/ 29 февраля 2020

Я хочу отображать ссылку на подписку в разделе «Моя учетная запись WooCommerce» только для указанной c роли пользователя. Но я не мог понять, как изменить навигацию таким образом.

Я нашел решение изменить порядок пунктов меню. И я нашел решение добавить пользовательские ссылки в навигацию. Но, к сожалению, я не смог объединить эти два в рабочий фрагмент.

Вот код для изменения порядка:

 function my_account_menu_order() {
    $menuOrder = array(
        'orders'             => __( 'Orders', 'woocommerce' ),
        'downloads'          => __( 'Download', 'woocommerce' ),
        'edit-address'       => __( 'Addresses', 'woocommerce' ),
        'edit-account'      => __( 'Account Details', 'woocommerce' ),
        'customer-logout'    => __( 'Logout', 'woocommerce' ),
        'dashboard'          => __( 'Dashboard', 'woocommerce' ),
    );
    return $menuOrder;
 }
 add_filter ( 'woocommerce_account_menu_items', 'my_account_menu_order' );

Поскольку ссылки находятся в массиве, я не мог использовать if/else для проверки роли пользователя.

Вот пример добавления пользовательских ссылок в навигацию: (отсюда: https://rudrastyh.com/woocommerce/my-account-menu.html#add_with_url)

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 = site_url();

    }
    return $url;

}

Но конечная точка подписки уже существует. Так что я не знаю, как добавить это таким образом.

Есть идеи?

1 Ответ

0 голосов
/ 29 февраля 2020

Извините, я нашел решение.

Следующий код помогает:

add_filter ( 'woocommerce_account_menu_items', 'misha_one_more_link' );
function misha_one_more_link( $menu_links ){

    // we will hook "anyuniquetext123" later
    $new = array( 'subscriptions'   => __( 'Subscriptions', 'woocommerce' ), );

    // 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;


}

Мне просто нужно добавить существующую конечную точку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...