Stray tag de fechamento de parágrafo ao usar códigos de acesso

4

Estou usando um shortcode básico para envolver algum texto em um div expansível. O que parece estar acontecendo é que o wpautop está inserindo uma tag de parágrafo de fechamento no início e uma tag de parágrafo de abertura no final do conteúdo que está sendo empacotado.

Veja como fica no editor:

  

[texto expansível="Mostrar conteúdo"]

     

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

     

[/ expansível]

E o 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 é a função de código de acesso:

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;
}
    
por hereswhatidid 03.09.2013 / 20:14

2 respostas

2

Este é um problema frustrante, pois não posso depender dos editores de conteúdo para ser bastante experientes com o Wordpress / HTML para entender como o texto que eles digitam será analisado ...

- EDITAR

Tendo pensado nisso um pouco mais, reconsiderei minha resposta anterior. O HTML5 + vem com a Extensão do Tidy , se você puder usar isso no seu servidor, o seguinte 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);
    }

Desta forma, poderá desfrutar de todos os benefícios das tags P doces e doces sem o receio de que o wpautop tenha desfeito alguma coisa. Outras opções para $tidyArgs podem ser vistas na documentação .

Se o Tidy não estiver disponível por qualquer motivo, isso ainda 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;
}

A desvantagem óbvia do último método é que não posso aplicar estilos a tags p em códigos de acesso, mas até que uma solução melhor apareça, ou o problema seja corrigido no Wordpress, ele funcionará!

    
por Gruffy 10.04.2015 / 10:35
-1

Instale o plug-in WP RAW HTML .

Isso insere caixas de seleção extras à direita de cada post no admin - marque a caixa "Desativar criação automática de parágrafos", isso resolverá o problema.

Mas certifique-se de ter cercado o conteúdo dessa postagem com o correto

tags.

Você pode fazer isso removendo um filtro, mas essa solução permite desativá-lo somente quando necessário e é muito mais fácil.

    
por RuFFCuT 06.09.2013 / 00:06