web-dev-qa-db-ja.com

the_excerpt - パスワードで保護された出力を変更したい

抜粋が指定されておらず、投稿がパスワードで保護されている場合は、the_excerptの出力を変更しようとしています。私はすでにパスワードで保護されたフォームを自分の望むものに変更することができますが、the_excerptは "これは保護された投稿であるため抜粋はありません"と出力しています。

このためのコードはwp-includes/post-template.phpにあります。

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

簡単な解決策は、そこにあるコードを変更して先に進むことですが、同様に、コアファイルを変更することは面倒なこと以上の価値があるということも知っています。自分のfunctions.phpファイルでこのコードを変更する方法を誰かが手助けできますか?

ありがとうございます。

EDIT:これは私が試したコードですが、うまくいきません:(

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

    global $post;
    $output = $post->post_excerpt;
    if ( post_password_required($post) ) {
        $output = __('This is some test content.');
        return $output;
    }
}

私はフィルタ、アクション、フックなどの概念にまったく慣れていないので、私と一緒にしてください!私は助けに感謝します!

1
cmegown

簡単な方法はテンプレート(または小さなラッパー)で出力をチェックすることです。

$excerpt = get_the_excerpt();

if( 'There is no excerpt because this is a protected post.' == $excerpt ) {

    // stuff
}
else {

    echo $excerpt;
}

別の方法は、そのフレーズをキャッチして修正するためにgettextフィルタ(__()の中で使われる)を使うことです。

2
Rarst

あなたはadd_filter()を調べたいでしょう。

これがそれへのコーデックスリンクです: http://codex.wordpress.org/Function_Reference/add_filter

これは私が時々参照する別の記事です: http://otto42.com/ak

-乾杯

編集: フィルタおよびアクション関数にパラメータを渡す

1
David

get_the_excerpt()はプラグイン可能な関数ではないため、単に同じ名前を付けて上書きすることはできません。保護されたステータスをチェックすることと、抜粋を表示できないテキストをreturnすることとの間にはフックがないので、彼の解決策の@Rarstによって提案された方法を使ってthe_excerpt()が得られたらフィルタリングをしなければならないでしょう。

これを回避するには(ハックな)方法があります。関数によって出力されるテキストを国際化機能を使って置き換えることができますが、これは完全に意図していない方法で国際化機能を使うので悪い解決法です。使用されます。

1
mor7ifer