Como faço para desativar tags de fechamento automático para marcação no WordPress (para HTML5 ou HTML4, por exemplo)?

16

Eu quero usar o HTML5 no meu tema WordPress, como desativo o wptexturize?

Eu não me importo de adicionar WP, mas quero que eles sejam <br> e não <br /> . Como obtenho controle sobre como essas quebras aparecem no meu código?

EDIT: Eu realmente me importo apenas com o problema da <br> tag, não me importo com as alterações tipográficas que ele faz.

EDIT2: Na verdade, acho que as tags <img> também são importantes. Qualquer tag autônoma de fechamento automático será importante aqui. Então, <hr> pode ser um problema também. Sem mencionar esses wp_head() itens como <link> e vários <meta> tags.

    
por artlung 11.08.2010 / 21:32
fonte

6 respostas

21

As quebras de linha são adicionadas por wpautop() , não wptexturize() . wpautop() é também a função que adiciona automaticamente tags de parágrafo.

É melhor você consertar o <br /> do que está substituindo o filtro. Como wpautop() é executado na prioridade 10, você pode conectar-se depois disso e consertá-lo.

add_filter( 'the_content', 'html5_line_breaks', 25 );

function html5_line_breaks( $content ) {
    return str_replace( '<br />', '<br>', $content );
}

Editar após a atualização do OP:

As funções do WordPress são projetadas para gerar XHTML. Para se livrar dessas barras em todo o site, você terá que usar um buffer de saída. Você poderia usar um filtro semelhante ao anterior para substituir as barras no conteúdo da postagem, mas isso não pegaria sua cabeça, barra lateral, etc.

É um pouco feio e pode ter um pequeno impacto no desempenho, mas aqui está (solte isso em um plug-in ou no arquivo functions.php do seu tema):

if ( !is_admin() && ( ! defined('DOING_AJAX') || ( defined('DOING_AJAX') && ! DOING_AJAX ) ) ) {
    ob_start( 'html5_slash_fixer' );
    add_action( 'shutdown', 'html5_slash_fixer_flush' );
}

function html5_slash_fixer( $buffer ) {
    return str_replace( ' />', '>', $buffer );
}

function html5_slash_fixer_flush() {
    ob_end_flush();
}

Esse código diz que, se você não estiver na área de administração e não estiver fazendo um tratamento de solicitação AJAX, comece a armazenar em buffer a saída por meio de um filtro e, em seguida, use o gancho de desligamento do WordPress.

    
por Viper007Bond 11.08.2010 / 23:46
fonte
8

Aqui você vai:

function my_awesome_tag_fixer( $input ){
  return preg_replace( '/(<.+)\s\/>/', '$1>', $input );
}

foreach( array('the_content', 'the_excerpt', 'comment_text') as $filter )
  add_filter( $filter, 'my_awesome_tag_fixer', 12 );

Não é a solução mais elegante, mas é muito mais rápida do que reescrever wpautop e wptexturize.

    
por John P Bloch 14.08.2010 / 13:57
fonte
7

Apenas achei; tags de fechamento automático em elementos nulos são html válido.

  

In HTML5 we've allowed the / on void elements (like <meta>, <img>, <br>, <input>, etc), to ease migration to and from XML.

enlace

Mais informações:

enlace

    
por Ryan Gibbons 13.08.2010 / 22:18
fonte
6

Isso pode ser desativado em, e. o arquivo function.php do tema aproveitando a função remove_filter() (http://codex.wordpress.org/Function_Reference/remove_filter)

remove_filter("the_content", "wptexturize");
    
por thomasjo 11.08.2010 / 21:40
fonte
5

Eu tenho um tema inicial para html5 e WordPress e também uma função não para wptexturize, mas para wpautop (). Incluir também outros elementos de html, como thead, tfoot, de lado e usar a sintaxe de html5 como
e

/**
 * wpautop for HTML5, allowed: table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend|section|article|aside|header|footer|hgroup|figure|details|figcaption|summary)
 * @link http://nicolasgallagher.com/using-html5-elements-in-wordpress-post-content/
 * @author nicolas@nicolasgallagher.com
 */
function html5wpautop($pee, $br = 1) {
    if ( trim($pee) === '' )
            return '';

    $pee = $pee . "\n"; // just to make things a little easier, pad the end
    $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
    // Space things out a little
    // *insertion* of section|article|aside|header|footer|hgroup|figure|details|figcaption|summary
    $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|fieldset|legend|section|article|aside|header|footer|hgroup|figure|details|figcaption|summary)';
    $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
    $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
    $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
    if ( strpos($pee, '<object') !== false ) {
            $pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
            $pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
    }
    $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
    // make paragraphs, including one at the end
    $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);
    $pee = '';
    foreach ( $pees as $tinkle )
            $pee .= '<p>' . trim($tinkle, "\n") . "</p>\n";
    $pee = preg_replace('|<p>\s*</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
    // *insertion* of section|article|aside
    $pee = preg_replace('!<p>([^<]+)</(div|address|form|section|article|aside)>!', "<p>$1</p></$2>", $pee);
    $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
    $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
    $pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
    $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
    $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
    $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
    if ($br) {
            $pee = preg_replace_callback('/<(script|style).*?<\/\1>/s', create_function('$matches', 'return str_replace("\n", "<WPPreserveNewline />", $matches[0]);'), $pee);
            $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
            $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
    }
    $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
    // *insertion* of img|figcaption|summary
    $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol|img|figcaption|summary)[^>]*>)!', '$1', $pee);
    if (strpos($pee, '<pre') !== false)
            $pee = preg_replace_callback('!(<pre[^>]*>)(.*?)</pre>!is', 'clean_pre', $pee );
    $pee = preg_replace( "|\n</p>$|", '</p>', $pee );

    return $pee;
}

// remove the original wpautop function
remove_filter('the_excerpt', 'wpautop');
remove_filter('the_content', 'wpautop');

// add our new html5autop function
add_filter('the_excerpt', 'html5wpautop');
add_filter('the_content', 'html5wpautop');

veja mais sobre o svn do html5 tema inicial, não um quadro!

    
por bueltge 13.08.2010 / 20:21
fonte
3

Desabilite o plugin WPtexturize que funcionou para mim: Desativar WPtexturize

É bem claro:

remove_filter('the_content', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
    
por Bob Sherron 11.08.2010 / 21:41
fonte

Tags