web-dev-qa-db-fra.com

Comment ne pas charger les commentaires sur l'aperçu?

J'ai besoin d'un moyen de ne pas charger le formulaire de commentaires lors de la prévisualisation d'un article. Y a-t-il un moyen d'y parvenir? Comment?

Si vous avez besoin d'une raison pour m'aider: j'utilise disqus et il génère une URL pour la "discussion" lors du premier chargement du formulaire de commentaire. S'il s'agit de l'aperçu, il ressemblera à quelque chose comme site.com/?post_type=food&p=41009 Et ceci est un problème car après, lorsque le message est publié sous une URL réelle, Disqus ne reconnaît pas le nombre de commentaires. Le seul moyen est de modifier manuellement l'URL de discussion. J'ai déjà contacté disqus et ils disent, "pas un bug" si vous ne voulez pas que disqus choisisse l'URL de prévisualisation, ne chargez pas disqus sur la page de prévisualisation, le seul moyen que je connaisse est de supprimer complètement le formulaire de commentaires alors, comment pourrais-je m'y prendre? Existe-t-il une sorte de condition pour la page d'aperçu?

1
Michael Rogers

J'ai jeté un coup d'œil rapide au plugin Disqus. Cela fonctionne en désactivant l'option avant que le plugin décide d'imprimer le formulaire.

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;

}

Vous pouvez également essayer quelque chose comme ça (non testé)

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

Voici une suggestion: fermez les commentaires lorsque prévisualise :

add_filter( 'template_redirect', function()
{
    if( is_preview() )
        add_filter( 'comments_open', '__return_false' );
} );

Cela devrait empêcher le chargement de comments_template() s’il s’agit par exemple. enveloppé avec

if( comments_open() ) 
    comments_template();

dans ton thème. Il existe également une vérification comments_open() dans comment_form() pour empêcher le formulaire de s'afficher si les commentaires sont fermés.

Nous pourrions aussi le faire manuellement dans notre thème enfant:

if( ! is_preview() ) 
    comments_template();

mais je ne suis pas sûr de savoir comment cela fonctionne avec des plugins comme Disqus.

Voici quelques suggestions très intéressantes sur la manière d’interférer avec le chargement de comments_template().

PS: J'ai remarqué l'option disqus_active dans la fonction dsq_can_replace():

if (get_option('disqus_active') === '0'){ return false; }

nous pourrions donc essayer quelque chose comme:

add_filter( 'template_redirect', function()
{
    is_preview() && add_filter( 'pre_option_disqus_active', 
         function( $value ) { return '0'; }
    );
} );

mais notez que cela n'a pas été testé!

0
birgire