web-dev-qa-db-fra.com

Quel est le problème avec ce code, je dois faire un shortcode blockquote

J'ai un shortcode pour un blockquote [blockquote]this is the quote[/blockquote] ... c'est le code.

function shortcode_shortcodetest( $atts, $content = null ) {
    $return = '<div class="blockquotewrapper"><blockquote>';
    $return .= do_shortcode( $content );
    $return .= '</blockquote>';
    $return .= '</div>';
    return $return;
}
add_shortcode( 'shortcodetest', 'shortcode_shortcodetest' );

donc je m'attendrais à une sortie de:

<div class="blockquotewrapper">
<blockquote><p>this is a test</p></blockquote>
</div> 

ou peut-être

<div class="blockquotewrapper">
<blockquote>this is a test</blockquote>
</div>

mais ce que je reçois c'est:

<div class="blockquotewrapper">
<blockquote>this is a test<p></p></blockquote>
</div>

(notez la position de la balise de paragraphe d'ouverture)

Qu'est-ce qui cause le déplacement de la balise p d'ouverture à l'endroit où elle se trouve? J'ai remarqué que si je supprime le div ou le blockquote de la fonction shortcode, cela ne se produit pas, mais je voulais utiliser le wrapper pour des raisons de style et parce que dans la version complète, j'ai une possibilité de citer associée ... et évidemment, j'ai besoin du blockquote.

2
byronyasgur

Il m'est arrivé par hasard de découvrir ce que c'était, alors je pense que je vais laisser cela ici car cela pourrait aider quelqu'un dans le futur. Certaines pages Web, y compris une réponse à cette question suggèrent d'utiliser le code suivant pour empêcher wpautop de s'exécuter après les codes abrégés. Maintenant, je ne pouvais pas pleinement comprendre ce code, mais je l'avais dans mon functions.php et pour quelque raison que ce soit, c'était la cause de ce qui précède.

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 12);
3
byronyasgur

La recherche sur le codex montre que WordPress transforme automatiquement les sauts de ligne doubles du contenu en balises de paragraphe. Le code que vous avez mis dans votre functions.php le désactivera. Cela changera cela sur chaque page de votre site.

Une meilleure solution pourrait être de vérifier votre fonction de code abrégé. Il est fort probable qu'il produise des espaces à la fin de sa sortie. Mabey une ligne vide à la fin de la sortie HTML avant une balise <?php d'ouverture?

?>

output some html here....               (one line end here)
                                        (one line end here)
<?php
some other functions here...

Ce que vous avez fonctionnera probablement ici, mais cela modifiera la sortie de toutes vos pages. Je doute que c'est ce que vous aviez en tête.

0
Chris Strutton