问题描述

如何从页面中删除评论部分,而不是从帖子页面删除?

最佳解决方案

如果要在帖子上显示评论和评论表单,而不是在页面上,您需要根据显示项目的类型 (帖子或页面) 将模板文件中的逻辑分为 comments_template()。有两种方法可以这样做:您可以为两个项目保留一个模板文件,并使用 conditional tags

if (!is_page()) {
     comments_template();
}

另一个选项是为您的帖子使用 single.php 模板文件,并为您的页面使用 page.php(有关详细信息,请参阅 the Template Hierarchy) 。只需在页面模板中不要再调用 comments_template()。如果帖子和页面布局之间没有其他差异,则具有条件标签的一个组合模板文件可能更好的可维护性。

如果要远距离执行此操作,那么模板文件已经包含对 comments_template()的调用,您可以创建一个挂接到 comments_template 过滤器的插件,并将其重定向到目录中的空文件 (也可以甚至是插件文件本身 – 由于它只包含 PHP 代码,它不会显示任何东西 – 但这将是混淆他人) 。

add_filter('comments_template', 'no_comments_on_page');
function no_comments_on_page( $file )
{
    if ( is_page() ) {
        $file = dirname( __FILE__ ) . '/empty-file.php';
    }
    return $file;
}

次佳解决方案

comments.php 模板开始时,我非常喜欢 Hybrid 主题的这个片段,如果在 per-post /per-page 上不支持或禁用注释,它将灵活地禁用注释:

if ( !post_type_supports( get_post_type(), 'comments' ) || ( !have_comments() && !comments_open() && !pings_open() ) )
    return;

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。