динамическая / изменяемая кнопка woocommerce / sensei во вторичном меню

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

Если пользователь вышел из системы, он увидел бы кнопку с надписью «зарегистрироваться» и указанием на страницу входа.

Кто-нибудь знает, возможно ли это?

Я думаю, что я близко, но я не уверен, возможно ли это:

Это в functions.php моей дочерней темы:

    function storefront_secondary_navigation() {
if ( has_nav_menu( 'secondary' ) ) {
?>
<nav class="secondary-navigation" role="navigation" aria-label="<?php esc_html_e( 'Secondary Navigation', 'storefront' ); ?>">
<p>wat is deze</p>
<?phpif( ! is_user_logged_in()) {
wp_nav_menu(
array(
'theme_location'    => 'secondary',
'fallback_cb'       => '',

)

);

}
else{
wp_nav_menu(
array(
'theme_location'    => 'secondary',
'fallback_cb'       => '',

)

);

}
echo "menu locations";
$hoi = get_nav_menu_locations();
var_dump($hoi);
//outputs an array with 3 objects: 'primary', 'secondary', and 'handheld'.
?>
</nav><!-- #site-navigation -->
<?php
}
}

0

Решение

В WordPress <body> элемент имеет класс logged-in если пользователь вошел в систему. Таким образом, вы можете использовать это, чтобы скрыть правую кнопку:

Добавьте это к вашему style.css:

#menu-item-8071 {
display: none;
}

body.logged-in #menu-item-8071 {
display: block;
}

body.logged-in #menu-item-8011 {
display: none;
}

Вместо того, чтобы использовать идентификаторы пунктов меню в качестве селектора CSS, вы можете добавить свои собственные классы CSS к своим кнопкам. Сначала вы должны включить «CSS-классы» в настройках экрана (вверху страницы редактора меню). Теперь вы можете ввести дополнительные классы CSS для каждого пункта меню.

например.:

  • show-if-logged-in для первой кнопки
  • hide-if-logged-in для второй кнопки

Таким образом, вы можете использовать этот код CSS:

.show-if-logged-in {
display: none;
}

body.logged-in show-if-logged-in {
display: block;
}

body.logged-in .hide-if-logged-in {
display: none;
}
1

Другие решения

Мне удалось это исправить, и это работает. Я сделал 2 отдельных пункта во вторичном меню через редактор меню WordPress. Затем я создал хук действия, где он проверяет, вошел ли пользователь в систему или нет, а затем скрывает кнопку (с соответствующей ссылкой, которая была настроена в редакторе меню) соответственно.

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

function modify_secondary_menu_buttons() {
if( ! is_user_logged_in()) {
echo '<script type="text/javascript">
jQuery("#menu-item-8071").css("display", "none");
</script>';
return;

}
else{
echo '<script type="text/javascript">
// Document ready
jQuery(document).ready(function(){
console.log("You are logged in");

jQuery("#menu-item-8011").css("display", "none");

});
</script>';
}
}
add_action( 'wp_footer', 'modify_secondary_menu_buttons' );
0

По вопросам рекламы [email protected]