Как не загружать форму комментариев при предварительном просмотре публикации?


Мне нужен способ не загружать форму комментариев при предварительном просмотре сообщения, есть ли способ добиться этого? Как?

Если вам нужна причина, чтобы помочь: Я использую disqus, и он генерирует URL-адрес для "обсуждения" при первой загрузке формы комментариев, если это предварительный просмотр, то он будет выглядеть примерно так site.com/?post_type=food&p=41009 И это проблема, потому что впоследствии, когда сообщение будет опубликовано под реальным URL-адресом, disqus не распознает количество комментариев. То единственный способ - вручную изменить URL-адрес обсуждения. Я уже связался с disqus, и они говорят: "это не ошибка", если вы не хотите, чтобы disqus выбирал URL-адрес предварительного просмотра, не загружайте disqus на страницу предварительного просмотра, единственный известный мне способ - полностью удалить форму комментариев, так как бы я поступил? Есть ли какое-то условие для страницы предварительного просмотра?

Author: Michael Rogers, 2016-08-08

2 answers

Я бросил быстрый взгляд на плагин 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
Author: bynicolas, 2016-08-08 22:37:32

Вот одно предложение: Закрывайте комментарии при предварительном просмотре:

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

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

Но обратите внимание, что это непроверено!

 0
Author: birgire, 2017-04-13 12:37:34