it-swarm-vi.tech

Làm cách nào để tắt các thẻ tự đóng để đánh dấu trong WordPress (ví dụ: cho HTML5 hoặc HTML4)?

Tôi muốn sử dụng HTML5 trong chủ đề WordPress của mình, làm cách nào để tắt wptexturize?

Tôi không phiền WP thêm dấu ngắt, nhưng tôi muốn chúng là <br> chứ không phải <br />. Làm cách nào để tôi có quyền kiểm soát cách các dấu ngắt đó hiển thị trong mã của tôi?

EDIT: Tôi chỉ thực sự quan tâm đến vấn đề thẻ <br>, tôi không bận tâm đến những thay đổi chính tả mà nó tạo ra.

EDIT2: Trên thực tế, tôi đoán các thẻ <img> cũng quan trọng. Bất kỳ thẻ độc lập tự đóng sẽ quan trọng ở đây. Vì vậy, <hr> cũng có thể là một vấn đề. Không đề cập đến các mục wp_head() như <link> và các thẻ <meta> khác nhau.

17
artlung

Ngắt dòng được thêm bởi wpautop(), không phải wptexturize(). wpautop() cũng là chức năng tự động thêm thẻ đoạn văn.

Tốt hơn hết là bạn nên sửa <br /> 'so với việc bạn thay thế bộ lọc. Vì wpautop() chạy ở mức ưu tiên 10, bạn chỉ có thể kết nối sau đó và sửa nó.

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

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

Chỉnh sửa sau khi cập nhật OP:

Các chức năng WordPress được thiết kế để xuất XHTML. Để thoát khỏi những dấu gạch chéo trên toàn trang web, bạn sẽ phải sử dụng bộ đệm đầu ra. Bạn có thể sử dụng bộ lọc tương tự như bộ lọc ở trên để thay thế dấu gạch chéo trong nội dung bài đăng, nhưng điều đó sẽ không bắt được đầu, thanh bên, v.v.

Nó hơi xấu và có thể ảnh hưởng nhỏ đến hiệu suất, nhưng ở đây bạn đi (bỏ cái này vào một plugin hoặc tệp functions.php của chủ đề của bạn):

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

Mã đó cho biết nếu bạn không ở trong khu vực quản trị và không thực hiện xử lý yêu cầu AJAX, sau đó bắt đầu đệm đầu ra qua bộ lọc và sau đó sử dụng móc tắt máy WordPress, xuất bộ đệm đó.

21
Viper007Bond

Ở đây bạn đi:

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

Đây không phải là giải pháp tao nhã nhất, nhưng nó được thực hiện nhanh hơn rất nhiều so với viết lại wpautop và wptexturize.

8
John P Bloch

Chỉ cần tìm thấy nó; các thẻ tự đóng trên các phần tử void là html hợp lệ.

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

Thêm thông tin:

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

7
Ryan Gibbons

Điều này có thể bị vô hiệu hóa trong ví dụ: chủ đề function.php file bằng cách tận dụng chức năng remove_filter() (http://codex.wordpress.org/Function_Reference/remove_filter)

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

Tôi có một chủ đề khởi đầu cho html5 và WordPress và cũng là một chức năng không dành cho wptexturize, nhưng dành cho wpautop (). Bao gồm cả các yếu tố khác của html, như thead, t feet, sang một bên và sử dụng cú pháp của html5 như
[.__.] và

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

xem thêm về svn của chủ đề khởi động html5, không phải là khung!

5
bueltge

Vô hiệu hóa plugin WPtexturize làm việc cho tôi: Vô hiệu hóa WPtexturize

Mặc dù điều này khá khó khăn:

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