web-dev-qa-db-ja.com

空の抜粋を含むthe_excerptフィルター

抜粋自体が空白または空の場合に抜粋投稿を調整するにはどうすればよいですか。私は見て、the_excerptフィルタのコードは空かどうかをテストし、抜粋が空の場合はapply_filtersが呼び出される前に戻ります。これはたいていの場合おそらく理にかなっています。可能であれば「デフォルト」の抜粋を設定します。

https://core.trac.wordpress.org/browser/tags/4.7/src/wp-includes/post-template.php#L380

抜粋を調整する別の方法があると思いますが、まだ見つけていません。ありがとうございました!

Per Vinod Dalviの依頼詳細を追加する。私はこれをtwentysixteen(v1.2)の子テーマで使用していますが、ほとんど空白のWordPressインストールで親テーマのみを使用してこれをテストしました。私は次のコードを使っています。

add_filter( 'the_excerpt', function( $excerpt ) {
    die( 'the_excerpt filter was called' );
} );

上記のコードを使用しても、抜粋フィールドが空ではない場合にのみ呼び出されているフィルターを確認できます。また、上記のリンクされたコードでは、空のテストとreturn before フィルターが表示されます。適用されます。

私は自分の問題を見つけました。テーマtwentysixteen(v1.2)では、フィルターtwentysixteen_excerptを起動するhas_excerpt関数を呼び出す前に、抜粋をテストするために関数the_excerptを呼び出す関数the_excerptを使用しています。 emptyのテストは私がもともと使用していたフィルタget_the_excerptに対してのみなので、少なくとも私の混乱の一部です。だからVinod Dalvi答えはあなたが使用しているテーマに応じて正しいです。

オリジナルの質問はTwentysixteenテーマの文脈ではなかったので、そしてVinodの答えは正しいのですが(ほとんどの場合)、私はあなたがTwentysixteenテーマのためにこの仕事をしたいならtemplate-parts/content-single.phpをオーバーライドする必要があると付け加える必要があると感じましたあなたの子供のテーマでテンプレートを作成し、ちょうどthe_excerpt()(function)のためにtwentysixteen_excerpt(L16)を削除します。

1
JSP

あなたがpostの抜粋フィールドで手動で設定された抜粋について話しているなら、抜粋が設定されていなければデフォルトの抜粋を表示するためにあなたの子テーマまたはプラグインのfunctions.phpファイルで以下のコードを使うことができます。

function display_default_excerpt( $excerpt ) {

    if ( has_excerpt() ) {
        return $excerpt;
    } else {
        return __( 'There is no excerpt so displaying default excerpt.' );
    }
}
add_filter( 'the_excerpt', 'display_default_excerpt' );
1
Vinod Dalvi