web-dev-qa-db-ja.com

投稿プレビューにコメントフォームを読み込まないようにするにはどうすればいいですか?

投稿をプレビューするときにコメントフォームを読み込まないようにする方法が必要です。これを実現する方法はありますか?どうやって?

あなたが手助けする理由が必要な場合:私はdisqusを使用し、コメントフォームが最初にロードされたときに "議論"のためのURLを生成します。そしてこれは問題です。後で投稿が実際のURLの下で公開されると、コメント数が認識されないためです。唯一の方法は、ディスカッションのURLを手動で変更することです。私はすでにdisqusに連絡しました、そして彼らがあなたがdisqusにプレビューのURLを選ばせたくないならプレビューページにdisqusをロードしないでください、私は「コメントフォームを完全に削除することです」と言います。だから私はこれについてどうやって行くのだろうか?プレビューページに何らかの条件はありますか?

1
Michael Rogers

私はdisqusプラグインをちょっとのぞいてみました。これは、プラグインがフォームを印刷することを決定する前にオプションを無効にすることで機能します。

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;

}
2
bynicolas

1つの提案はここにあります:プレビューのときにコメントを閉じてください:

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();

しかし、それがDisqusのようなプラグインでどのように機能するのか私にはわかりません。

ここでcomments_template()のロードを妨げる方法についての非常に興味深い提案です。

シモンズ:私はdsq_can_replace()関数のdisqus_activeオプションチェックに気づいた:

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'; }
    );
} );

しかし、これはテストされていないことに注意してください。

0
birgire