web-dev-qa-db-ja.com

[...]または自動抜粋なしで、フィルタ処理されていない抜粋を取得する方法

抜粋を取得するための標準的な方法は、the_excerpt()またはget_the_excerpt()テンプレートタグを使用することです。 「抜粋」フィールドの実際の内容だけを取得しようとしています。

抜粋がある場合は、(要約したり[...]を追加したりせずに)完全に表示したいと思います。抜粋がない場合は、何も表示したくありません。

Wordpressでこれを行う簡単な方法はありますか?

このようなもの:

$real_excerpt = ??? 

if ( $real_excerpt ) {
   echo $real_excerpt;
} // shouldn't show anything if there isn't a custom excerpt
6
supertrue

グローバルな$post変数を使わないのはなぜですか?その投稿に対応するdb行にある内容のオブジェクトが含まれています。使い方は次のとおりです。

global $post; // If for some reason it's readily accessible, invoke it
if($post->post_excerpt != '') {
    echo($post->post_excerpt);
}

または

$my_post = get_post($post_id);
if($my_post->post_excerpt != '') {
    echo($my_post->post_excerpt);
}

非常に単純ですが、うまく動かない場合はお知らせください。

5
Tomas Buteler

遡る:

the_excerpt()

the_excerpt()のソースを見ると、次の関数定義があります。

function the_excerpt() {
    echo apply_filters('the_excerpt', get_the_excerpt());
}

これは、get_the_excerpt()がプレーンでフィルタなしのコンテンツを保持していることを意味します。

get_the_excerpt()

get_the_excerpt()のソースを見てみると、次のことがわかります。

function get_the_excerpt( $deprecated = '' ) {
    if ( !empty( $deprecated ) )
        _deprecated_argument( __FUNCTION__, '2.3' );

    global $post;
    $output = $post->post_excerpt;
    if ( post_password_required($post) ) {
        $output = __('There is no excerpt because this is a protected post.');
        return $output;
    }

    return apply_filters('get_the_excerpt', $output);
}

get_the_excerpt()にフィルタが追加されています。

デフォルトのフィルタとwp_trim_excerpt()

somethingに添付されているすべてのコアフィルターは、 ~/wp-includes/default-filters.php 内にあります。

そこには(WPバージョン3.4の場合)、以下のフィルタがあります: 行#147のwp_trim_excerpt()

wp_trim_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);
}

私たちの選択肢は何ですか?

単純にフィルタを削除することで、これらの各機能をすべての不要なフィルタと一緒に使用できます。しかしこれはまた、他のすべての要素からそれらを削除することを意味します。

プレーンな->excerptを呼び出すと、すべての場合で抜粋が得られます - 何もない場合を除く。つまり、 この回答で説明したようにscriptsタグとCDATAタグを挿入することができます _ですが、パスワードの確認後のチェックも必要です。

4
kaiser