問題描述

我正在建立一個主題,在主頁上顯示潛在的幾十個帖子的摘錄。我的所有帖子沒有手冊摘錄,所以 $post->post_excerpt 對於許多帖子都是空的。如果沒有手冊摘錄,我想使用 built-in get_the_excerpt() 功能,但在迴圈外不可用。

跟蹤功能,它看起來像是使用 wp-includes /formatting.php 的 wp_trim_excerpt 即時建立摘錄。我在 wp_trim_excerpt( $item->post_content )的程式碼中呼叫它,但它只是返回完整的內容。我做錯了嗎?

我知道我可以建立自己的功能來建立一個摘錄,但我喜歡在可能的情況下使用 built-in 函式,保持我的程式碼與其他潛在的外掛/過濾器相容。

http://adambrown.info/p/wp_hooks/hook/wp_trim_excerpt?version=3.0&file=wp-includes/formatting.php

最佳解決方案

由於 WP 3.3.0,wp_trim_words()如果能夠獲取要生成摘錄的內容,將會很有幫助。希望對某人有幫助,它可以儲存建立自己的字計數功能。

http://codex.wordpress.org/Function_Reference/wp_trim_words

次佳解決方案

wp_trim_excerpt()有一個好奇的機制 – 如果有任何東西傳遞給它,那麼它什麼都不做。

這是背後的基本邏輯:

  • get_the_excerpt()檢查手動摘錄;

  • wp_trim_excerpt()如果沒有手冊摘錄,並從內容或預告片中輸入。

兩者都與全域性變數緊密相連,所以迴圈。

在 Loop 之外你最好從 wp_trim_excerpt()中取程式碼,並編寫自己的修剪功能。

第三種解決方案

更新:

這是我使用的 wp_trim_excerpt() 的衍生物。工作完美源自 Wordpress 版本 3.0.4

function my_excerpt($text, $excerpt)
{
    if ($excerpt) return $excerpt;

    $text = strip_shortcodes( $text );

    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]>', $text);
    $text = strip_tags($text);
    $excerpt_length = apply_filters('excerpt_length', 55);
    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    $words = preg_split("/[nrt ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    if ( count($words) > $excerpt_length ) {
            array_pop($words);
            $text = implode(' ', $words);
            $text = $text . $excerpt_more;
    } else {
            $text = implode(' ', $words);
    }

    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。