問題描述
我正在建立一個主題,在主頁上顯示潛在的幾十個帖子的摘錄。我的所有帖子沒有手冊摘錄,所以 $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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。