web-dev-qa-db-fra.com

Unautop/Sanitize contenu ajouté à une publication via un plugin

J'utilise le plugin SimpleReach qui ajoute du contenu à chaque message en utilisant le hook de contenu. Le contenu ajouté est

<!-- SimpleReach Slide Plugin Version: {{srslide_plugin_version}} -->
<script type='text/javascript' id='simplereach-slide-tag'>
    __reach_config = {
      pid: '{{srslide_pid}}',
      title: '{{title}}',
      tags: {{{tags}}},
      authors: {{{authors}}},
      channels: {{{channels}}},{{slide_logo_elem}}
      slide_active: {{srslide_disable_on_post}},{{slide_icon_elem}}
      date: '{{published_date}}',
      url: '{{canonical_url}}',
      header: '{{srslide_header_text}}'
    };
    var content = document.getElementById('simplereach-slide-tag').parentNode, loc;
    if (content.className){ loc = '.' + content.className; }
    if (content.id){ loc = '#' + content.id; }
    __reach_config.loc = loc || content;
    (function(){
    var s = document.createElement('script');
      s.async = true;
      s.type = 'text/javascript';
      s.src = document.location.protocol + '//d8rk54i4mohrb.cloudfront.net/js/slide.js';
      __reach_config.css = '{{srslide_css_url}}';
      var tg = document.getElementsByTagName('head')[0];
      if (!tg) {tg = document.getElementsByTagName('body')[0];}
      if (tg) {tg.appendChild(s);}
    })();
</script>

Cependant, Wordpress assainit le contenu en ajoutant des pauses et des paragraphes supplémentaires avant et après.

Je souhaite désactiver l'autop uniquement pour ce contenu afin que les sauts/paragraphes ne soient pas ajoutés.

Y a-t-il un moyen de le faire?

1

Quelques mises en garde avant de commencer. Il a essayé d'exécuter ce plugin mais apparemment, je dois m'inscrire sur un site tiers avant de pouvoir l'utiliser, ce qui jetterait des clés dans les tests.

Deuxièmement, j'ai du mal à reproduire ce problème. C’est peut-être parce que j’ai trop battu mon développeur et qu’il est temps de le nettoyer et de recommencer (ce qui est le cas), de sorte que cela soit dit ...

wpautop s'exécute sur l'intégralité du contenu de la publication. À ma connaissance, vous ne pouvez en aucun cas limiter son exécution à une partie du contenu.

Je n'ai pas installé et testé ce plugin, je ne peux donc pas confirmer que votre analyse du problème est correcte, mais en général, vous pouvez effectuer plusieurs opérations pour éviter d'avoir du contenu wpautop mangle:

  1. Inscrivez-vous et mettez en file d'attente le script afin d'éviter de le placer dans le corps du message.
  2. Supprimez tous les sauts de ligne et les espaces supplémentaires de ce bloc de code. Rien de tout cela n'est nécessaire et sans cela wpautop n'aurait rien à craindre.
  3. Insérer le contenu très tard via une priorité lorsque le rappel est ajouté à the_content

Le seul que vous pourrez peut-être effectuer est le n ° 3. Le script ajoute ce code au moyen de: add_filter('the_content', 'srslide_insert_slide_js');. Vous devriez pouvoir supprimer cela avec remove_filter('the_content', 'srslide_insert_slide_js'); et le rajouter avec add_filter('the_content', 'srslide_insert_slide_js',1000); pour le lancer après wpautop.

1
s_ha_dum

Je ne pense pas que vous puissiez configurer autop comme ça.

La seule idée qui me vienne à l’esprit est de définir une méta de publication après avoir inséré la publication, puis défini une condition dans functions.php.

Je ne sais pas comment le message est ajouté par ce plugin, mais vous devrez récupérer son identifiant.

Ensuite, utilisez ceci pour ajouter la méta:

<?php add_post_meta($post_id, 'no_autop', 'true'); ?> 

Puis désactivez l'autop sur les posts avec cette méta en ajoutant ceci à functions.php:

if(get_post_meta( $post_id, 'no_autop', true )=='') {
remove_filter( 'the_content', 'wpautop' );
}
0
Alex Dumitru