问题描述
如何从页面中删除评论部分,而不是从帖子页面删除?
最佳解决方案
如果要在帖子上显示评论和评论表单,而不是在页面上,您需要根据显示项目的类型 (帖子或页面) 将模板文件中的逻辑分为 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。