ここでは、かなり明白なことを見逃しているに違いないと感じますが、WordPressに協力させることはできません。
機能付きのFacebook OGタグを生成しています。抜粋を除いて、すべてうまくいきます。
get_the_excerpt($post->ID)
が廃止されたので、まったく新しいループを作成しなくても抜粋を作成する別の方法はありますか?私には無理があるようです。
私の最初の本能はapply_filters()
を使うことでした:
$description = apply_filters('the_excerpt', get_post($post->ID)->post_content);
これで、HTML形式のコンテンツを含む完全な投稿ができました。さて、間違っているはずです。それで、私は次の論理的な考えを試みました:
$description = apply_filters('get_the_excerpt', get_post($post->ID)->post_content);
サイコロはありません。今はHTMLはありませんが、それでも完全な投稿です(これは本当に混乱します)。
大丈夫、問題無いです。素敵なものをすべてスキップして、トリムされたエントリに進むだけです。
$description = wp_trim_excerpt(get_post($post->ID)->post_content);
変化なし。
だから、私の質問はこれです:一体何が起こっているの?足りないものはありますか。
私はWPコアを調べてthe_excerpt()
がどのように機能するかを調べましたが、これは私の呼び出しと同じように見えます。
/**
* Display the post excerpt.
*
* @since 0.71
* @uses apply_filters() Calls 'the_excerpt' hook on post excerpt.
*/
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
私の調査結果に基づいて、いくつか質問があります。
ご覧いただきありがとうございます。私はここでかなり困惑しています。
答えはwp_trim_excerpt()
にありました。
これはwp-includes/functions.php:1879
で定義されています。
/**
* Generates an excerpt from the content, if needed.
*
* The excerpt Word amount will be 55 words and if the amount is greater than
* that, then the string ' [...]' will be appended to the excerpt. If the string
* is less than 55 words, then the content will be returned as is.
*
* The 55 Word limit can be modified by plugins/themes using the excerpt_length filter
* The ' [...]' string can be modified by plugins/themes using the excerpt_more filter
*
* @since 1.5.0
*
* @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
* @return string The excerpt.
*/
function wp_trim_excerpt($text = '') {
$raw_excerpt = $text;
if ( '' == $text ) {
$text = get_the_content('');
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
そのため、渡されたテキストは処理されません。 空のパラメータで呼び出された場合にのみ機能します。
これを解決するために、問題を解決するためのクイックフィルタをテーマに追加しました。
/**
* Allows for excerpt generation outside the loop.
*
* @param string $text The text to be trimmed
* @return string The trimmed text
*/
function rw_trim_excerpt( $text='' )
{
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
return wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
add_filter('wp_trim_excerpt', 'rw_trim_excerpt');
やや冗長ですが、抜粋を作成するたびに新しいループを開くよりも優れています。
あなたは私のカスタム関数を使ってコンテンツをフィルタリングすることができます( NARGA Framework からです)
ショートコード、HTMLコードの自動削除、[...]の削除、 "続きを読む"テキストの追加(翻訳可能)
/**
* Auto generate excerpt from content if the post hasn't custom excerpt
* @from NARGA Framework - http://www.narga.net/narga-core
* @param $excerpt_lenght The maximium words of excerpt generating from content
* @coder: Nguyễn Đình Quân a.k.a Narga - http://www.narga.net
**/
function narga_excerpts($content = false) {
# If is the home page, an archive, or search results
if(is_front_page() || is_archive() || is_search()) :
global $post;
$content = $post->post_excerpt;
$content = strip_shortcodes($content);
$content = str_replace(']]>', ']]>', $content);
$content = strip_tags($content);
# If an excerpt is set in the Optional Excerpt box
if($content) :
$content = apply_filters('the_excerpt', $content);
# If no excerpt is set
else :
$content = $post->post_content;
$excerpt_length = 50;
$words = explode(' ', $content, $excerpt_length + 1);
if(count($words) > $excerpt_length) :
array_pop($words);
array_Push($words, '...<p><a class="more-link" href="' . get_permalink() . '" title="' . the_title_attribute('echo=0') . '"> ' . __( 'Read more »', 'narga' ) . ' </a></p>');
$content = implode(' ', $words);
endif;
$content = '<p>' . $content . '</p>';
endif;
endif;
# Make sure to return the content
return $content;
}
// Add filter to the_content
add_filter('the_content', 'narga_excerpts');