解决方案来源:
https://stackoverflow.com/questions/48511579/jquery-check-wordpress-logged-in-cookie
是一条死胡同。它不适用于WooCommerce,因为登录不是通过标准的WordPress登录屏幕完成的,而是通过专用的登录表单完成的,并且当用户登录时,没有可通过JavaScript访问的cookie。
我通过jQuery Ajax创建了一个有效的解决方案,但我对结果不满意,因为链接出现有一些延迟。至少它们对于缓存的页面显示正确,用户不会感到困惑。
Then I sought for something both reliable and fast, what I perfectly found in this answer by Janos Szabo which shows how to create and delete script-accessible cookies on login and logout:
Check if user is logged in using JQuery
对于任何感兴趣的人,这里是我的Ajax解决方案的代码:
子主题“js”文件夹中“taisho.js”文件的内容:
jQuery.ajax(
{
type: "post",
url: my_ajax_object.ajax_url,
data: {
action: \'is_user_logged_in\'
},
success: function(response){
var menu_links = response == \'yes\' ? logged : anonymous;
$(\'nav.secondary-navigation\').html(\'<ul id="menu-topmenu" class="menu">\' + menu_links + \'</ul>\');
}
});
我的职能内容。php文件:
// Store login and my account + logout links as js variables for conditional display, to be used in js file.
add_action(\'wp_footer\', \'taisho_login_logout\');
function taisho_login_logout() {
?>
<script type="text/javascript">
var anonymous = <?php echo json_encode(
\'<li><a href="\' . get_permalink( woocommerce_get_page_id( \'myaccount\' ) ) . \'">Log in</a></li>\'
)?>;
var logged = <?php echo json_encode(
\'<li><a href="\'. get_permalink( woocommerce_get_page_id( \'myaccount\' )) . \'">My account</a></li>
<li><a href="\'. wp_logout_url( get_permalink( woocommerce_get_page_id( \'myaccount\' ) ) ) . \'">Log out</a> </li>\'
)?>;
</script>
<?php
}
// Enqueue js file residing in current (parent or child) theme and enable Ajax url in this file through wp_localize_script.
add_action( \'wp_enqueue_scripts\', \'taisho_login_check\' );
function taisho_login_check() {
wp_enqueue_script( \'taisho-login-check\', get_stylesheet_directory_uri() . \'/js/taisho.js\', array(\'jquery\'));
wp_localize_script( \'taisho-login-check\', \'my_ajax_object\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
}
// Check if user is logged in through Ajax.
add_action(\'wp_ajax_is_user_logged_in\', \'ajax_check_user_logged_in\');
add_action(\'wp_ajax_nopriv_is_user_logged_in\', \'ajax_check_user_logged_in\');
function ajax_check_user_logged_in() {
echo is_user_logged_in()?\'yes\':\'no\';
die();
}