Website sử dụng WordPress hầu như đều có sử dụng plugin cache nhầm tối ưu tốc độ website. Tuy nhiên, việc này thường dẫn đến một số hiển thị không mong muốn. Trong đó có cache menu login-logout – không thay đổi hoặc hiển thị đúng trạng thái đăng nhập hoặc chưa đăng nhập.

Để khắc phục tình trạng này, tôi đã sử dụng ajax để load riêng cho những menu hoặc những nội dung có liên quan đến tài khoản đăng nhập.
Sử dụng ajax để khắc phục cache menu login-logout
Tạo menu với chuỗi riêng để nhận dạng trong JQuery
- Vào chức năng quản lý menu: Giao diện -> Menu
- Tạo 1 menu tạm, tại vị trí mà ta muốn đặt menu Login hoặc Logout
- Ở đây tôi sử dụng ký tự href=”#signinsignout “. Xem ảnh:

File /MY_THEME/footer.php
- Trước thẻ đóng </body>
- Có sử dụng JQuery
[....]
<script>
jQuery(document).ready(function($){
var $itemA = $('a[href="#signinsignout"]');
if(!$itemA.length)
return;
var $params={'action': 'LoadingSignInOutMenu'}
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type: 'POST',
dataType: "json",
data: $params,
beforeSend: function(){
},
success: function(response){
if(response.success){
$itemA.attr('href', response.data.url);
$itemA.html(message.data.title);
}else{
console.log('Load menu error!');
}
},
error: function (request, status, error) {
console.log(error);
}
});
});
</script>
</body>
Hàm trong file /[MY_THEME]/functions.php
- 2 dòng add_action(wp_ajax ….) để cho phép gọi từ JQuery
- sử dụng hàm wp wp_login_url() và wp_logout_url()
<?php
[...]
add_action( 'wp_ajax_nopriv_LoadingSignInOutMenu', 'LoadingSignInOutMenu' );
add_action( 'wp_ajax_LoadingSignInOutMenu', 'LoadingSignInOutMenu' );
function LoadingSignInOutMenu(){
$resultMenu = array();
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
$resultMenu = array(
'url' => wp_logout_url(),
'title' => $current_user->display_name . " - ". __('Logout', 'language_domain')
);
} else {
$resultMenu = array(
'url' => wp_login_url(),
'title' => __('Login', 'language_domain')
);
}
wp_send_json_success($resultMenu);
exit;
}
[...]
?>
Đây chưa phải là cách duy nhất hay tốt nhất để giải quyết vấn đề cache menu login-logout trong WordPress. Tùy trường hợp cụ thể của bạn mà chúng ta cần có cách xử lý khác nhau. Hãy để lại nội dung ở phần bình luận về trường hợp của bạn, có thể tôi sẽ tìm ra cách giải quyết tốt nhất!
Xem thêm: