j.grima
Sé que esto se debe haber preguntado cientos de veces, pero he estado probando varias soluciones que pude encontrar, pero ninguna parece funcionar.
tengo un shortcode
que envuelve el contenido:
[important_note]Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nam vel velit at ex congue aliquet.[/important_note]
Estoy usando la siguiente función de shortcode en functions.php
:
function important_note( $atts, $content = null ) {
return '<div class="imp-note">'.$content.'</div>';
}
add_shortcode("important_note", "important_note");
Este es el código html resultante:
<div class="imp-note">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<p></p>
<p>Nam vel velit at ex congue aliquet.</p>
</div>
El problema principal es el vacío. <p>
que he estado tratando de resolver usando estas soluciones mencionadas aquí: elimine las etiquetas
vacías de los códigos cortos de wordpress a través de una función php y en Github sin embargo, esto parece resolver <p>
envolviendo el shortcode
no el contenido de la shortcode
.
Tener la primera línea sin ninguna <p>
el envoltorio también es un poco extraño, lo que me hace pensar que debería agregar código a la función de código abreviado.
Gracias de antemano por cualquier ayuda.
ACTUALIZAR
Ok, entonces este fragmento de código parece que funciona:
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'the_content', 'shortcode_unautop',100 );
Como se ve aquí: https://stackoverflow.com/a/21460343/1275525 y aquí: http://www.paulund.co.uk/remove-line-breaks-in-shortcodes (Eliminando wpautop() al contenido solo en códigos cortos)
Y el contenido en el shortcode debe ser así, no como lo he mostrado arriba:
[important_note]
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nam vel velit at ex congue aliquet.
[/important_note]
El contenido está separado de las etiquetas de shortcode. Ese shortcode genera el siguiente html:
<div class="imp-note">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Nam vel velit at ex congue aliquet.</p>
</div>
Confirmará si funciona en todos los códigos cortos…
j.grima
Como mencioné en la actualización de mi pregunta, este fragmento de código en el functions.php
Hace el truco:
remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99);
add_filter( 'the_content', 'shortcode_unautop',100 );
Como se ve en la respuesta de esta pregunta: https://stackoverflow.com/a/21460343/1275525 y esta publicación: http://www.paulund.co.uk/remove-line-breaks-in-shortcodes (desplácese hacia abajo hasta: Eliminando wpautop() al contenido solo en códigos cortos)
También es importante tener el contenido en el código abreviado separado de las etiquetas del código abreviado, de lo contrario, la primera línea no se incluirá en <p>
etiqueta:
[important_note]
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nam vel velit at ex congue aliquet.
[/important_note]
Salida HTML:
<div class="imp-note">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Nam vel velit at ex congue aliquet.</p>
</div>
Revisé los códigos cortos en todo el sitio de WordPress y todos tienen el formato correcto. Esperemos que esto ayude a algunos píos por ahí 🙂
¿Has probado esto?
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
Para más información: http://codex.wordpress.org/Function_Reference/wpautop
Y también puede agregar esta función en el archivo functions.php
add_filter('the_content', 'remove_empty_p', 20, 1);
function remove_empty_p($content){
$content = force_balance_tags($content);
return preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
}