it-swarm.dev

Wie deaktiviere ich selbstschließende Tags für Markups in WordPress (z. B. für HTML5 oder HTML4)?

Ich möchte HTML5 in meinem WordPress-Theme verwenden. Wie deaktiviere ich wptexturize?

Es macht mir nichts aus, WP Pausen hinzuzufügen, aber ich möchte, dass sie <br> und nicht <br /> sind. Wie kann ich steuern, wie diese Unterbrechungen in meinem Code angezeigt werden?

BEARBEITEN: Ich kümmere mich nur wirklich um das Problem mit dem <br>-Tag, die darin vorgenommenen typografischen Änderungen stören mich nicht.

EDIT2: Eigentlich denke ich, <img> Tags sind auch wichtig. Alle selbstschließenden eigenständigen Tags sind hier von Bedeutung. <hr> könnte also auch ein Problem sein. Ganz zu schweigen von wp_head() Elementen wie <link> und verschiedenen <meta> Tags.

17
artlung

Zeilenumbrüche werden durch wpautop() und nicht durch wptexturize() hinzugefügt. wpautop() ist auch die Funktion, die automatisch Absatz-Tags hinzufügt.

Es ist besser, den <br /> zu reparieren, als den Filter zu ersetzen. Da wpautop() mit Priorität 10 ausgeführt wird, können Sie sich danach einfach einhängen und das Problem beheben.

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

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

Nach OP-Update bearbeiten:

WordPress-Funktionen dienen zur Ausgabe von XHTML. Um diese abschließenden Schrägstriche auf der gesamten Site zu beseitigen, müssen Sie einen Ausgabepuffer verwenden. Sie könnten einen Filter verwenden, der dem obigen ähnlich ist, um Schrägstriche im Inhalt des Posts zu ersetzen, aber das würde Ihren Kopf, die Seitenleiste usw. nicht einklemmen.

Es ist ein bisschen hässlich und hat möglicherweise einen kleinen Einfluss auf die Leistung, aber hier ist es (ziehen Sie dies in ein Plugin oder die functions.php-Datei Ihres Themas):

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

Dieser Code besagt, dass Sie, wenn Sie nicht im Administrationsbereich sind und keine AJAX -Anforderungsbearbeitung durchführen, die Ausgabe durch einen Filter puffern und dann mit dem WordPress-Shutdown-Hook diesen Puffer ausgeben.

21
Viper007Bond

Bitte schön:

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

Es ist nicht die eleganteste Lösung, aber es geht viel schneller, als wpautop und wptexturize neu zu schreiben.

8
John P Bloch

Habe es gerade gefunden; Selbstschließende Tags für leere Elemente sind gültiges HTML.

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

http://lists.whatwg.org/pipermail/help-whatwg.org/2008-August/000137.html

Mehr Informationen:

http://wiki.whatwg.org/wiki/FAQ#Should_I_close_empty_elements_with_.2F.3E_or_.3E.3F

7
Ryan Gibbons

Dies kann z.B. die function.php - Datei des Themas, indem die remove_filter() -Funktion genutzt wird (http://codex.wordpress.org/Function_Reference/remove_filter)

remove_filter("the_content", "wptexturize");
6
thomasjo

Ich habe ein Starter-Theme für HTML5 und WordPress und auch eine Funktion nicht für wptexturize, sondern für wpautop (). Schließen Sie auch andere Elemente von HTML, wie Thead, TFoot, beiseite und verwenden Sie die Syntax von HTML5 wie
und

/**
 * 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 [email protected]
 */
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');

sehen Sie mehr über das svn des HTML5-Starter-Themas, kein Framework!

5
bueltge

WPtexturize-Plugin deaktivieren hat bei mir funktioniert: WPtexturize deaktivieren

Es ist jedoch ziemlich einfach:

remove_filter('the_content', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
3
Bob Sherron