it-swarm-id.com

Bagaimana cara mematikan tag penutup diri untuk markup di WordPress (untuk HTML5, atau HTML4, misalnya)?

Saya ingin menggunakan HTML5 di tema WordPress saya, bagaimana cara mematikan wptexturize?

Saya tidak keberatan WP menambahkan jeda, tapi saya ingin mereka menjadi <br> dan bukan <br />. Bagaimana saya mendapatkan kontrol atas bagaimana jeda itu muncul dalam kode saya?

EDIT: Saya hanya benar-benar peduli tentang masalah tag <br>, saya tidak keberatan dengan perubahan tipografi yang dibuatnya.

EDIT2: Sebenarnya, saya rasa tag <img> juga penting. Tag mandiri yang menutup sendiri akan penting di sini. Jadi, <hr> mungkin menjadi masalah juga. Belum lagi wp_head() item seperti <link> dan berbagai tag <meta>.

17
artlung

Jeda baris ditambahkan oleh wpautop(), bukan wptexturize(). wpautop() juga merupakan fungsi yang secara otomatis menambahkan tag paragraf.

Anda lebih baik memperbaiki <br /> 's dari Anda mengganti filter. Karena wpautop() berjalan pada prioritas 10, Anda bisa menghubungkan setelah itu dan memperbaikinya.

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

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

Edit setelah pembaruan OP:

Fungsi WordPress dirancang untuk menghasilkan XHTML. Untuk menyingkirkan garis miring trailing di seluruh situs, Anda harus menggunakan buffer output. Anda dapat menggunakan filter yang mirip dengan yang di atas untuk mengganti garis miring pada konten posting, tetapi itu tidak akan menarik kepala, bilah sisi, dll.

Agak jelek dan mungkin memiliki dampak kecil pada kinerja, tapi di sini Anda pergi (taruh ini di plugin atau file functions.php tema Anda):

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

Kode itu mengatakan jika Anda tidak berada di area administrasi dan tidak melakukan penanganan permintaan AJAX, kemudian mulai buffering output melalui filter dan kemudian menggunakan kait shutdown WordPress, output buffer itu.

21
Viper007Bond

Ini dia:

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

Ini bukan solusi yang paling elegan, tetapi dapat menyelesaikannya lebih cepat daripada menulis ulang wpautop dan wptexturize.

8
John P Bloch

Baru saja menemukannya; tag yang menutup sendiri pada elemen batal adalah html yang valid.

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

Lebih banyak informasi:

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

7
Ryan Gibbons

Ini dapat dinonaktifkan di mis. theme function.php file dengan memanfaatkan fungsi remove_filter() (http://codex.wordpress.org/Function_Reference/remove_filter)

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

Saya memiliki tema pemula untuk html5 dan WordPress dan juga fungsi bukan untuk wptexturize, tetapi untuk wpautop (). Sertakan juga elemen html lainnya, seperti thead, tfoot, sidebar dan gunakan sintaks seperti html5
dan

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

lihat lebih lanjut tentang svn dari tema html5 starter, bukan framework!

5
bueltge

Nonaktifkan plugin WPtexturize bekerja untuk saya: Nonaktifkan WPtexturize

Ini cukup sulit meskipun:

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