Etiqueta de párrafo de cierre perdido cuando se usan códigos cortos

4

Estoy usando un shortcode básico para envolver un texto en un div expandible. Lo que parece estar sucediendo es que el wpautop está insertando una etiqueta de párrafo de cierre al principio y una etiqueta de párrafo de apertura al final del contenido envuelto.

Así es como se ve en el editor:

  

[texto expandible="Mostrar contenido"]

     

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras   Fermentum facilisis malesuada. Suspendisse potenti. Aenean dui turpis,   Ornare in ipsum eget, vestibulum egestas nulla.

     

[/ expandible]

Y el HTML renderizado:

<div class="expandable"><a href="#" class="expand-link">Show Content</a></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras fermentum facilisis malesuada. Suspendisse potenti. Aenean dui turpis, ornare in ipsum eget, vestibulum egestas nulla.</p>
<p></div>

Esta es la función de código abreviado:

function expandable_content_shortcode( $atts, $content = null ) {
    $args = shortcode_atts( array(
        'text' => __( 'View More', $this->plugin_slug ),
        'linklocation' => 'top'
    ), $atts, 'expandable' );

    if ( $args['linklocation'] === 'top' ) {
        $output = '<div class="expandable-content"><a href="#" class="expand-link">' . $args['text'] . '</a>' . $content . '</div>';
    } else {
        $output = '<div class="expandable-content">' . $content . '<a href="#" class="expand-link">' . $args['text'] . '</a></div>';
    }

    return $output;
}
    
pregunta hereswhatidid 03.09.2013 - 20:14

2 respuestas

2

Este es un problema frustrante ya que no puedo depender de que los editores de contenido sean lo suficientemente inteligentes con Wordpress / HTML para entender cómo se analizará el texto que ingresaron ...

--EDIT--

Después de pensarlo un poco más, he reconsiderado mi respuesta anterior. HTML5 + viene con la extensión Tidy , si puede usar esto en su servidor, lo siguiente funcionará :

function cleanUpAutoP($content)
    {
        $tidy = new Tidy();
        // Switch out the encoding an doctype in $tidyArgs to suit your use case
        // 'show-body-only' HTML to be parsed as a fragment
        // rather than a whole document
        $tidyArgs = array(  'doctype' => 'html',
                            'input-encoding' => 'utf8',
                            'output-encoding' => 'utf8',
                            'show-body-only' => true
                    );
        // Return the repaired string
        return $tidy->repairString($content, $tidyArgs);
    }

De esta manera, puedes disfrutar de todos los beneficios de las etiquetas P dulces y dulces sin el temor de que wpautop haya estropeado algo. Más opciones para $tidyArgs se pueden ver en la documentación .

Si Tidy no está disponible por cualquier motivo, esto todavía debería funcionar:

function cleanUpAutoP($content) {

    // Replace all OPENING paragraph tags with <br /><br />
    $content = preg_replace('/<p[^>]*>/', '<br /><br />', $content);

    // Remove all CLOSING p tags
    $content = str_replace('</p>', '', $content);


    return $content;
}

El inconveniente obvio de este último método es que no puedo aplicar estilos a las etiquetas p en los códigos cortos, pero hasta que aparezca una solución mejor, o el problema se solucione en Wordpress, se solucionará.

    
respondido por el Gruffy 10.04.2015 - 10:35
-1

Instale el complemento HTML WP RAW .

Esto inserta casillas de verificación adicionales a la derecha de cada publicación en el administrador. Marque la casilla que dice 'Deshabilitar la creación automática de párrafos', esto resolverá su problema.

Pero asegúrate de haber rodeado el contenido de esa publicación con la información correcta

etiquetas.

Puede hacer esto eliminando un filtro, pero esta solución le permite deshabilitarlo solo cuando sea necesario y es mucho más fácil.

    
respondido por el RuFFCuT 06.09.2013 - 00:06

Lea otras preguntas en las etiquetas