it-swarm.asia

WordPress'teki işaretleme için kendiliğinden kapanan etiketleri nasıl kapatabilirim (örneğin, HTML5 veya HTML4 için)?

HTML5'i WordPress temamda kullanmak istiyorum, wptexturize'ı nasıl kapatabilirim?

WP sonları eklemeyi umursamıyorum, ancak onların <br> ve <br /> olmasını istemiyorum. Bu molaların kodumda nasıl göründüğü konusunda kontrolü nasıl alabilirim?

EDIT: Yalnızca <br> etiket sorunuyla gerçekten ilgileniyorum, yaptığı tipografik değişikliklerle ilgilenmiyorum.

EDIT2: Aslında, sanırım <img> etiketleri de önemli. Kendi kendine kapanabilen bağımsız etiketler burada önemli olacaktır. Yani, <hr> da bir sorun olabilir. <link> gibi çeşitli wp_head() öğelerinden ve çeşitli <meta> etiketlerinden söz etmeyin.

17
artlung

Satır sonları wpautop() tarafından değil, wptexturize() tarafından eklenir. wpautop() ayrıca paragraf etiketlerini otomatik olarak ekleyen işlevdir.

<br /> 'ları düzeltmek, filtreyi değiştirmekten daha iyidir. wpautop() işlevi öncelik 10'da çalıştığından, bundan sonra bağlanıp düzeltebilirsiniz.

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

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

OP güncellemesinden sonra düzenle:

WordPress işlevleri, XHTML çıktısı almak üzere tasarlanmıştır. Site genelinde izleyen eğik çizgilerden kurtulmak için bir çıkış tamponu kullanmanız gerekecek. Yazı içeriğindeki eğik çizgileri değiştirmek için yukarıdakine benzer bir filtre kullanabilirsiniz, ancak bu durum başınızı, kenar çubuğunu vb.

Biraz çirkin ve performans üzerinde küçük bir etkisi olabilir, ama işte başlıyorsunuz (bunu bir eklentiye veya temanın functions.php dosyasına bırakı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();
}

Bu kod, yönetim alanında değilseniz ve bir AJAX istek işlemesi yapmamanız durumunda, çıktıyı bir süzgeçten tamponlamaya ve ardından WordPress kapatma kancasını kullanarak o tamponu çıkarmaya başlar.

21
Viper007Bond

Hadi bakalım:

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

En zarif çözüm değil, ancak wpautop ve wptexturize yeniden yazmaktan çok daha hızlı bir şekilde yapılmasını sağlıyor.

8
John P Bloch

Sadece onu buldum; boşluk elemanlarındaki kendi kendine kapanan etiketler geçerli html'dir.

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-Ağustos/000137.html

Daha fazla bilgi:

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

7
Ryan Gibbons

Bu, örn. remove_filter() işlevinden yararlanarak temanın function.php dosyası (http://codex.wordpress.org/Function_Reference/remove_filter)

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

Html5 ve WordPress için bir başlangıç ​​teması ve ayrıca wptexturize için değil, wpautop () için bir işlevim var. Thead gibi diğer html öğelerini de ekleyin, tfoot, kenara bırakın ve html5 benzeri sözdizimini kullanın
ve

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

html5 başlangıç ​​temasının svn hakkında daha fazla bilgi edinin, bir çerçeve değil!

5
bueltge

WPtexturize eklentisini devre dışı bırak benim için çalıştı: WPtexturize

Oldukça zor olsa da:

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