如何在帖子预览时不加载评论表单?

时间:2016-08-08 作者:Michael Rogers

我需要一种在预览帖子时不加载评论表单的方法,有没有办法做到这一点?怎样

如果你需要一个帮助的理由:我使用disqs,它会在第一次加载评论表单时为“讨论”生成一个url,如果这是预览,那么它看起来就像站点。com/?post\\u类型=食品和;p=41009,这是一个问题,因为当文章在真实url下发布后,Discus将无法识别评论计数。唯一的方法是手动更改讨论url。我已经联系了Discus,他们说,“不是bug”,如果你不想Discus选择预览url,不要在预览页面上加载Discus,我知道的唯一方法是完全删除评论表单,那么我该怎么做?预览页是否有某种条件?

2 个回复
最合适的回答,由SO网友:bynicolas 整理而成

我快速浏览了一下Disqs插件。这可以在插件决定打印表单之前禁用该选项。

add_filter( \'pre_option_disqus_active\', \'wpse_conditional_disqus_load\' );
function wpse_conditional_disqus_load( $disqus_active ) {
  if( is_preview() ){
    return \'0\';
  }

  return $disqus_active;

}
您也可以尝试类似的方法(未测试)

add_filter( \'the_content\', \'wpse_load_disqus\');
function wpse_load_disqus( $content ){
  if( is_preview() ){
    return $content;
  }

  if( is_singular() ) { // displays on all single post types. use is_single for posts only, is_page for pages only

    $content .= ?>
      // You disqus script here
    <?php ;
  }

  return $content;

}

SO网友:birgire

这里有一个建议:预览时关闭评论:

add_filter( \'template_redirect\', function()
{
    if( is_preview() )
        add_filter( \'comments_open\', \'__return_false\' );
} );
这应该可以阻止comments_template() 如果是用

if( comments_open() ) 
    comments_template();
在您的主题中。还有一个comments_open() 检查范围comment_form() 在注释关闭时阻止窗体显示。

我们也可以在子主题中手动执行此操作:

if( ! is_preview() ) 
    comments_template();
但是我不确定它是如何与像disqs这样的插件一起工作的

Here 关于如何干扰comments_template().

PS:我注意到disqus_active 中的选项检查dsq_can_replace() 功能:

if (get_option(\'disqus_active\') === \'0\'){ return false; }
因此,我们可以尝试以下方法:

add_filter( \'template_redirect\', function()
{
    is_preview() && add_filter( \'pre_option_disqus_active\', 
         function( $value ) { return \'0\'; }
    );
} );
但请注意,这是未经测试的!