如何阻止Wordpress帖子密码登录失败时生成wp-postpass_无效cookie
问题根因
你当前的header判断逻辑仅校验wp-postpass_前缀的cookie是否存在,但WordPress即使用户输入错误密码也会生成该前缀的cookie(仅存储的密码哈希值与正确值不匹配),因此会出现头部导航误显示的问题。
最优解决方案
直接使用WordPress原生的密码校验函数替换你原有header中的逻辑,无需手动读取校验cookie,原生函数会自动完成cookie有效性判断:
<!-- Check post password validation and hide menu if user is not authenticated --> <?php global $post; // 原生函数判断当前页面是否需要密码、且用户未通过验证 if ( post_password_required( $post ) ) { ?> <style type="text/css">#header {display:none !important;}</style> <?php } ?>
额外注意事项
你当前直接修改WordPress核心文件post-template.php的操作存在风险,后续WordPress版本更新会直接覆盖你的自定义代码。建议将自定义密码表单的逻辑迁移到当前主题的functions.php文件中,通过the_password_form过滤器实现自定义,避免核心文件修改带来的问题。
如果你确实需要实现「登录失败时不生成wp-postpass_前缀cookie」的需求,可以在主题functions.php中添加以下钩子代码,密码校验失败时自动清除已生成的无效cookie:
add_action( 'login_form_postpass', function() { global $post; $input_password = $_POST['post_password'] ?? ''; if ( $post && ! hash_equals( $post->post_password, $input_password ) ) { // 密码错误,清除已设置的无效cookie setcookie( 'wp-postpass_' . COOKIEHASH, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN ); } } );
内容的提问来源于stack exchange,提问作者Ruan Petersen
相关产品推荐
相关产品推荐

