✅ 解决方案(无需升级,兼容 1.2.1)虽然没有后台开关,但我们可以通过 修改主题模板 或 添加自定义函数 来实现 “仅登录用户可见/可提交评论” 的效果。
✅ 方法一:在主题中手动限制(推荐,安全可靠)
步骤 1:编辑主题的评论模板通常位于:
•usr/themes/你的主题/comments.php
•或直接在 post.php / page.php 中
步骤 2:用 hasLogin() 判断用户是否登录将原来的评论调用代码:<?php $this->comments()->listComments(); ?>
<?php $this->comments()->respond(); ?>
替换为以下代码:<?php if ($this->user->hasLogin()): ?>

<!-- 已登录:显示评论列表 + 评论框 -->
<?php $this->comments()->listComments(); ?>
<?php $this->comments()->respond(); ?>

<?php else: ?>

<!-- 未登录:显示提示 -->
<div class="comment-login-required alert alert-info">
    请先 <a href="<?php $this->options->adminUrl('login.php'); ?>" rel="nofollow">登录</a> 才能发表评论。
</div>

<?php endif; ?>
效果:
•游客访问文章 → 看不到评论框,只看到“请登录”提示
•已登录用户 → 正常评论
💡 $this->user->hasLogin() 是 Typecho 1.0+ 就支持的原生方法,1.2.1 完全兼容。
✅ 方法二:通过插件实现(可选)如果你不想改主题,可以安装轻量插件:插件名称:LoginComment
•功能:强制只有登录用户才能提交评论
•兼容 Typecho 1.2.x
•GitHub 搜索关键词:typecho plugin login comment
⚠️ 注意:部分老插件可能已停止维护,建议优先使用 方法一(更稳定、无依赖)。
✅ 方法三:阻止游客提交(双重保险)即使隐藏了评论框,仍有人可能通过 POST 请求伪造评论。
我们可以在 functions.php 中加一层防护:在主题的 functions.php 末尾添加:// 阻止未登录用户提交评论
Typecho_Plugin::factory('Widget_Feedback')->comment = function($comment, $post) {

if (!$post->author->hasLogin()) {
    throw new Typecho_Widget_Exception(_t('请先登录再评论'), 403);
}
return $comment;

};
🔒 这样即使绕过前端,后端也会拒绝评论提交。
🧪 测试验证

  1. 退出登录,访问一篇文章 → 应看不到评论框
  2. 尝试手动访问评论提交地址(如 /action/comments?...)→ 应返回错误
  3. 登录后台账号 → 评论功能正常
    🔚 总结
    问题 解决方案
    Typecho 1.2.1 没有“仅登录评论”选项 ✅ 用 $this->user->hasLogin() 在主题中判断
    防止绕过前端提交 ✅ 在 functions.php 添加后端校验
    不想改代码? ⚠️ 可尝试老插件,但不推荐(兼容性风险)
    推荐采用 方法一 + 方法三组合,既安全又兼容 1.2.1。
    需要我:
    •提供一个完整的 comments.php 示例文件?
    •帮你生成带样式的“请登录”提示框(Bootstrap / 纯 CSS)?
    •检查你的主题是否已包含类似逻辑?
    (来自千问)

标签: none