¿Wordpress eliminando etiquetas p?

4

Ya me había topado con un caso en el que Wordpress agregó <p> tags. Sin embargo ahora estoy lidiando con la situación opuesta. Cuando agrego [] shortcodes dentro de <p> tags, WordPress elimina automáticamente <p> tags.

<p>[anyshortcode]Hello World[/anyshortcode]</p>

Se convierte en:

Hello World

Añadir dir="ltr" a <p> tags parece solucionar el problema, ¿tal vez hay una manera de agregarlo programáticamente a todos <p> tags?

¿Alguna idea sobre cómo solucionar esto?

    
pregunta Lisandro Vaccaro 14.03.2014 - 14:34

4 respuestas

4

Esto es más o menos lo que Foxsk8 mencionó en un comentario, por lo que el crédito debe ir a él, pero estas instrucciones adicionales serán útiles. El complemento de WordPress llamado TinyMCE Advanced resolverá su problema.

Este complemento viene con una opción dentro de Settings > TinyMCE Advanced que arreglará tus etiquetas <p> que desaparecen. Marque la casilla marcada como Stop removing the <p> and <br /> tags when saving and show them in the Text editor y sus etiquetas <p> se conservarán.

    
respondido por el E. Serrano 13.12.2014 - 19:47
1

TinyMCE está programado para facilitar la edición (lo que para nosotros, con conocimientos de HTML, a menudo no es el caso). De forma predeterminada, no debe aceptar el etiquetado <p> alrededor de [BLOQUES]. Esto se debe a que "[]" se usa para shortcode no solo en WP, sino en una tonelada de CMS basados en PHP. Los códigos cortos deben tener el contenedor de contenido apropiado.

Lo que significa que la solución es agregar las etiquetas <p> en tu código de código abreviado para que tu contenido se ajuste de la forma que deseas.

    
respondido por el STing 23.09.2014 - 20:16
0

Puedes agregar este código a continuación en tu archivo function.php

function content_formatter($content){

    $new_content = '';
    $pattern_full = '{(\[raw\].*?\[/raw\])}is';
    $pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
    $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

    foreach ($pieces as $piece) {
            if (preg_match($pattern_contents, $piece, $matches)) {
                    $new_content .= $matches[1];
            } else {
                    $new_content .= wptexturize(wpautop($piece));
            }
    }

    $array = array(
            '<p>[' => '[',
            ']</p>' => ']',
            ']<br />' => ']'
    );

    $new_content = strtr($new_content, $array);

    return $new_content;

}

Ahora, llame a esta función cuando sea necesario;

<?php echo content_formatter( get_field('field_name') ); ?>
    
respondido por el Mrudang Shah 23.05.2016 - 08:45
-1

Agregue esto a su archivo functions.php dentro de la carpeta de su tema.

remove_filter( 'the_content', 'wpautop' );
    
respondido por el Jack Tuck 14.03.2014 - 19:54

Lea otras preguntas en las etiquetas