如何让WordPress密码保护页面每次访问都要求输入密码?
WordPress密码保护页面强制每次访问验证及清除残留权限的解决方法
一、实现每次访问都要求输入密码
WordPress默认会通过Cookie保存密码验证状态,有效期默认是10天。要让每次访问都需要输入密码,只需修改Cookie的有效期为会话级(关闭浏览器即失效):
将以下代码添加到当前主题的functions.php文件中:
// 设置密码保护页面的Cookie为会话级,关闭浏览器即失效 function custom_post_password_expiry() { return 0; // 0表示会话Cookie,无持久有效期 } add_filter('post_password_expires', 'custom_post_password_expiry');
如果需要极端严格的验证(比如每次刷新页面都要求输入),可以将返回值设为1(1秒有效期),但这种方式会大幅降低用户体验,一般不推荐。
二、删除密码后阻止用户通过残留Cookie进入
当你删除页面的密码保护后,之前验证过的用户浏览器中仍会留存有效的密码Cookie,导致他们无需验证就能访问。可以添加代码自动清除这类残留Cookie:
将以下代码同样添加到主题的functions.php文件中:
// 当页面无密码保护时,清除残留的密码验证Cookie function clear_stale_password_cookie() { if (is_page() || is_single()) { $current_post = get_post(); // 检查当前页面是否已取消密码保护 if (empty($current_post->post_password)) { $cookie_name = 'wp-postpass_' . COOKIEHASH; if (isset($_COOKIE[$cookie_name])) { // 清除Cookie(设置过期时间为过去) setcookie($cookie_name, '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN); $_COOKIE[$cookie_name] = ''; } } } } add_action('template_redirect', 'clear_stale_password_cookie');
注意:修改主题文件前建议先备份,或者使用子主题添加代码,避免主题更新时代码丢失。
内容的提问来源于stack exchange,提问作者guynumber6
相关产品推荐
相关产品推荐

