web-dev-qa-db-fra.com

éléments <p> égarés

J'ai codé un shortcode wordpress pour les colonnes qui insère du code HTML via un shortcode. Le problème est que wpautop ajoute des éléments errants p qui rendent le code invalide.

Pour tester mettez ceci dans votre functions.php:

function static_col_container($atts, $content) {
    extract(shortcode_atts(array(
        'foo' => 'bar'
    ), $atts));

    $content = do_shortcode($content);
    $container = '<div class="static-column-container">' . $content . '</div>';
    return $container;
}

add_shortcode('static-cont', 'static_col_container');

function static_col($atts, $content) {
    extract(shortcode_atts(array(
    'space' => '2',
    'class' => ''
    ), $atts));

    $content = do_shortcode($content);
    $column_container = '<div class="static-column static-column-' . $space . ' ' . $class . '">' . $content . '</div>';

    return $column_container;
}

add_shortcode('static-col', 'static_col');

L'utilisation est:

[static-cont]
    [static-col]
       put some content here...
    [/static-col]
    [static-col]
       put some content here...
    [/static-col]
[/static-cont]

Je sais que Wordpress utilise wpautop pour insérer des balises p qui peuvent être désactivées via:

remove_filter('the_content', 'wpautop');

Le problème est que vous devez maintenant entrer vous-même chaque élément p, ce qui est pénible et rend l'éditeur visuel inutile. Quelqu'un at-il trouvé une meilleure solution?

1

Supprimez le filtre de the_content et exécutez-le après le traitement du shortcode.

Essayer:

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

Généralement, les codes courts sont traités après l'application de wpautop au contenu. Voir http://core.trac.wordpress.org/browser/tags/3.1/wp-includes/shortcodes.php#L296

8
keatch

J'ai eu le même problème, pas du point de vue de la validation, mais du point de vue du style, où une balise p d'ouverture errante ruinait mon code CSS.

$retour ='<div class="testimonial-meta">'
$retour .='<h5>'.$testimonial_name.',</h5><span>'.$testimonial_details.'</span>';
$retour .='</div>';
return $retour;

Revenait:

<div class="testimonial-meta">
    <h5>John Doe,</h5>
    <p><span>Company CEO</span></div>
</div>

J'ai corrigé le style en ajoutant dans mon CSS:

.testimonial-meta p{
    display:inline;
}

J'espère que cela pourrait être utile à quelqu'un.

0
Djave

Je ne vois pas ce problème sur mon installation locale, j'ai copié votre code de code abrégé, puis mis l'exemple fourni dans une publication, le résultat était le suivant.

<div class="static-column-container"><br>
<div class="static-column static-column-2 "><br>
put some content here…<br>
</div><br>
<div class="static-column static-column-2 "><br>
put some content here…<br>
</div><br>
</div>

Basculer entre HTML et Visual, je le vois toujours.

[static-cont]
    [static-col]
       put some content here...
    [/static-col]
    [static-col]
       put some content here...
    [/static-col]
[/static-cont]

...et rien d'autre..

Des plugins installés, TinyMCE advanced?

0
t31os