web-dev-qa-db-ja.com

Wp_trim_excerpt()はいつ呼び出されますか?

その宣言以外にwp_trim_excerpt()への参照はないようです - 私はTracとXrefの両方をチェックしました - いつそれがその魔法を働かせるのですか?

3
user13296

XRefを既に見たことがあるなら、docブロックの一番上にこのコメントを見ました。

/**
  * Generates an excerpt from the content, if needed.

そのため、コアでは使用されていませんが、必要に応じて使用できます。

更新

何が起こっているのか少し説明しましょう。

excerpt_lengthとexcerpt_moreはwp_trim_excerptの中にあり、それらを変更すると実際にthe_excerptとget_the_excerptが変更されます。そのため、wp_trim_excerptはどこかで何かをしなければなりません。

はいといいえ。 excerpt_lengthexcerpt_moreはフィルタによって生成されています。これがwp_trim_excerpt()関数の内部です。

$excerpt_length = apply_filters('excerpt_length', 55);
$excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');

デフォルトでは、$excerpt_length55に設定され、$excerpt_more[...]に設定されます。ただし、テーマとプラグインでこれを変更できます。代わりに、切り取られた抜粋の長さを70文字にしたいとしましょう。私は次のようなコードを使います。

function set_new_trim_length( $excerpt_length ) {
    return 70;
}
add_filter( 'excerpt_length', 'set_new_trim_length' );

後でwp_trim_excerpt()を呼び出すと、WordPressはそのデフォルト値の55を私のフィルタ関数に渡します。私のフィルタ関数は70を返し、wp_trim_excerpt()は代わりにそれを使います。

wp_trim_excerpt()は、呼び出し時にexcerpt_lengthまたはexcerpt_moreを設定または変更しません。関数は単にあなたがそれらの変数のために既に定義したどんなフィルタでも使用します。

さらなる更新

しかし、あなたがthe_excerptまたはget_the_excerptを呼び出すとき、それらはそれらのフィルタによって修正されます、それで私が知りたいのはそれらがそれらのフィルタによって修正される「いつ」です。

これはすべて、コンテンツの構築方法によって異なります。生成されたコンテンツからget_the_excerpt()関数に渡されるフィルタがwp_trim_excerpt()に適用されます。

そのため、抜粋を手書きすると、手書きの内容は変更されずにそのまま通過します。

抜粋($post->post_excerpt = '')を書かないと、投稿の内容はwp_trim_excerpt()に渡されて短縮され、返されます。

参考のために、このフィルターは/wp-includes/default-filters.php147行目 に追加されています。

add_filter( 'get_the_excerpt', 'wp_trim_excerpt'  );
2
EAMann