本文介绍如何通过自定义模板文件和条件判断,在不依赖插件的前提下,将 wordpress 中某个分类(如“c”)设为仅限已登录用户访问,兼容旧版 php 环境。
本文介绍如何通过自定义模板文件和条件判断,在不依赖插件的前提下,将 wordpress 中某个分类(如“c”)设为仅限已登录用户访问,兼容旧版 php 环境。
要实现 WordPress 中某一分类(例如 Category C)仅对已登录用户可见,而其他分类(A、B)保持公开,最稳妥且无需额外插件的方式是利用 WordPress 模板层级机制 + 用户登录状态校验。该方案完全基于主题文件修改,兼容低版本 PHP(如 5.6+),无需 Composer 或现代语法。
WordPress 支持按分类 slug 自定义模板。假设 Category C 的 slug 为 c(可在「文章 → 分类目录」中查看),请在当前启用的主题根目录下新建文件:
category-c.php
⚠️ 注意:文件名必须严格为 category-{slug}.php(小写、无空格、无特殊字符),否则无法生效。
在 category-c.php 中填入以下完整代码(已优化逻辑、修复原答案中的语法错误与逻辑漏洞):
<?php/** * Template Name: Category C - Authenticated Only * Description: 仅允许已登录用户访问本分类 */if (!defined('ABSPATH')) die('Direct access forbidden.');// 检查用户是否已登录if (!is_user_logged_in()) { // 未登录用户:显示友好提示并重定向(可选) get_header(); ?> <div class="content"> <h2>需要登录才能访问</h2> <p>您正在尝试访问受保护的内容。请先<a href="<?php echo wp_login_url(get_permalink()); ?>">登录</a>,或<a href="<?php echo wp_registration_url(); ?>">注册账号</a>。</p> </div> <?php get_footer(); exit;}// 已登录用户:正常加载分类归档(复用默认循环)get_header();?><main id="main" class="site-main"> <?php if (have_posts()) : ?> <header class="page-header"> <h1 class="page-title"><?php single_cat_title(); ?></h1> <?php the_archive_description('<div class="taxonomy-description">', '</div>'); ?> </header> <?php while (have_posts()) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <header class="entry-header"> <h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <div class="entry-meta"> <?php the_time('Y-m-d'); ?> | <?php the_category(', '); ?> </div> </header> <div class="entry-summary"> <?php the_excerpt(); ?> </div> </article> <?php endwhile; ?> <?php the_posts_pagination(); ?> <?php else : ?> <p>暂无文章。</p> <?php endif; ?></main><?php get_footer();
若需进一步限制仅特定角色(如 subscriber、editor)可访问,可替换登录判断部分为:
$user = wp_get_current_user();$allowed_roles = array('subscriber', 'editor', 'author'); // 按需增删if (empty(array_intersect($allowed_roles, (array) $user->roles))) { wp_die('权限不足:您没有访问此分类的权限。', '访问被拒绝', array('response' => 403));}
? 提示:$user->roles 是数组,强制转为 (array) 可避免 PHP 旧版本中空角色导致的警告。
完成以上配置后,访问 https://yoursite.com/category/c/ 时,未登录用户将看到提示页,已登录用户则正常浏览文章列表——无需插件、不升级 PHP、零兼容风险,是经典 WordPress 权限控制的最佳实践之一。