Comment puis-je désactiver les balises à fermeture automatique pour les balises dans WordPress (pour HTML5 ou HTML4, par exemple)?

16

Je souhaite utiliser HTML5 dans mon thème WordPress, comment puis-je désactiver wptexturize?

Cela ne me dérange pas que WP ajoute des pauses, mais je veux qu'elles soient <br> et non <br /> . Comment puis-je contrôler comment ces pauses apparaissent dans mon code?

MODIFIER: Le problème de balise <br> ne m'intéresse que de façon importante. Les modifications typographiques apportées ne me dérangent pas.

EDIT2: En fait, les balises <img> importent également. Toutes les balises autonomes à fermeture automatique auront une importance ici. Ainsi, <hr> pourrait également être un problème. Sans parler des éléments wp_head() tels que <link> et diverses balises <meta> .

    
posée artlung 11.08.2010 - 21:32
la source

6 réponses

21

Les sauts de ligne sont ajoutés par wpautop() , et non par wptexturize() . wpautop() est également la fonction qui ajoute automatiquement des balises de paragraphe.

Vous feriez mieux de réparer les <br /> que de remplacer le filtre. Étant donné que wpautop() est exécuté à la priorité 10, vous pouvez simplement vous connecter après cela et le réparer.

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

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

Modifier après la mise à jour de l'OP:

Les fonctions WordPress sont conçues pour générer du XHTML. Pour vous débarrasser de ces dernières barres obliques au niveau du site, vous devrez utiliser un tampon de sortie. Vous pouvez utiliser un filtre similaire à celui ci-dessus pour remplacer les barres obliques dans le contenu du message, mais cela ne vous prendrait pas la tête, la barre latérale, etc.

C'est un peu moche et peut avoir un impact mineur sur les performances, mais le tour est joué (déposez ceci dans un plugin ou dans le fichier functions.php de votre thème):

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();
}

Ce code indique que si vous ne vous trouvez pas dans la zone d'administration et que vous ne gérez pas de requête AJAX, commencez à mettre en tampon la sortie via un filtre, puis utilisez le crochet d'arrêt WordPress pour générer ce tampon.

    
réponse donnée Viper007Bond 11.08.2010 - 23:46
la source
8

Voilà:

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 );

Ce n’est pas la solution la plus élégante, mais elle le fait beaucoup plus rapidement que de réécrire wpautop et wptexturize.

    
réponse donnée John P Bloch 14.08.2010 - 13:57
la source
7

Je viens de le trouver; Les balises à fermeture automatique sur les éléments void sont des balises HTML valides.

  

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

enlace

Plus d'informations:

enlace

    
réponse donnée Ryan Gibbons 13.08.2010 - 22:18
la source
6

Ceci peut être désactivé dans par exemple le fichier function.php du thème en tirant parti de la fonction remove_filter() (http://codex.wordpress.org/Function_Reference/remove_filter)

remove_filter("the_content", "wptexturize");
    
réponse donnée thomasjo 11.08.2010 - 21:40
la source
5

J'ai un thème de démarrage pour html5 et WordPress, ainsi qu'une fonction non pas pour wptexturize, mais pour wpautop (). Incluez également d'autres éléments de HTML, tels que thead, tfoot, apart et utilisez la syntaxe de html5 telle que
et

/**
 * 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');

en savoir plus sur le svn du code HTML 5 thème de démarrage, pas un cadre!

    
réponse donnée bueltge 13.08.2010 - 20:21
la source
3

Le plugin Désactiver WPtexturize a fonctionné pour moi: Désactiver WPtexturize

C'est assez direct cependant:

remove_filter('the_content', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
    
réponse donnée Bob Sherron 11.08.2010 - 21:41
la source

Lire d'autres questions sur les étiquettes