1


0

私は(WP Gutsを理解して)これにはかなり慣れていません、そして私はより良いHooksとFiltersを理解したいのです、私はそれをCodexから正しく得ることができません。

簡単なテストをしました、

ページが保護されている場合、タイトルから "Protected:"文を消去するためにget_title()メソッドをオーバーライドするという考えがあります。protected_title_formatフィルタがあり、それを使用することを考えました…​

_post-template.php_のその行は以下を指定します。

$ protected_title_format = apply_filters( 'protected_title_format'、__( 'Protected:%s'));

私がCODEXから得ることができるもののために、私はそのようなフィルタを取り除き、私自身を追加する必要があります。

remove_action( 'protected_title_format'); apply_filters( 'protected_title_format'、__( '自分のページが保護されています:%s'));

もちろん、のようなものを使用して

// Removing action
関数remove_title_action(){remove_action( 'protected_title_format'、 'get_the_title'、3); add_action( 'init'、 'remove_title_action');

// Adding custom function
add_action( 'protected_title_format'、 'fancy_title'、3、4);

関数fancy_title($ id = 0){$ post =

"私は世界の王者です!... > "#:。 $ title "< $投稿。 "<";

if(!is_admin()){if(!empty($ post-> post_password)){$ protected_title_format = apply_filters( 'protected_title_format'、__( '自分の保護されたページ:%s')); $ title = sprintf($ protected_title_format、$ title); apply_filters( 'the_title'、$ title、$ post-> ID)を返します。 }

エコーを出力することはできますが、$ idを取得することはできません(そのため、$ titleや$ postは不要です)。このメソッドは、保護された部分の文字列以外のすべてを削除するget_title()のコピーです。

誰かが私に説明しても構いませんか。 ありがとうございました

'' '' '

  • PS *私が学びたいのですが、これはこの質問のアイデアであり、「post-template.phpに移動して変更してください」と言ってくれる人ではありません。 ……」 !

1 Answer


3


あなたは実際にあなたがしようとしていることよりもはるかに簡単にこれを行うことができます。 あなたは正しい軌道に乗っています。

基本的に、あなたがしたいことはWordPressタイトルの "Protected:"部分を取り除く独自の関数を作成することです。 これを行う最も簡単な方法は、preg_replace()を使用して "Protected:"テキストを検索して削除する関数を単純に作成することです。 あなたはそれをあなた自身のテキストで文字列を自動置換するのと同じくらい簡単に持つことができます。

これを行うサンプル関数があります。 パラメータとして$ titleを取り、それを修正したものを返しています。

function remove_protected_text($title) {
  $match = '/Protected: /';
  $replacement = '';

  $title = preg_replace($match, $replacement, $title);
  return $title;
}

次にやるべきことは、実際に関数をフィルタフックに追加することです。 私たちがこの場合に興味を持っているフィルターフックは 'the_title’です。 そこで、今書いた関数の下に次の行を追加します。

add_filter( 'the_title', 'remove_protected_text', 10);

これにより、関数 `+ remove_protected_text()+`が 'the_title’フィルターに追加されます。 この場合、私は私たちのフィルタに10の優先順位を与えるために3番目の引数を使いました。 これは完全にオプションですが、私はこのフィルタがかなり低い優先順位であると思います。

だから私たちのコードはすべて一緒にこのようになるはずです:

function remove_protected_text($title) {
    $match = '/Protected: /';
    $replacement = '';

    $title = preg_replace($match, $replacement, $title);
    return $title;
}
add_filter( 'the_title', 'remove_protected_text', 10);

あなたのテーマのfunctions.phpファイルにそのコードを追加することはそれが機能することを可能にするでしょう。 あなたはテキストを出力するWordPressの大部分のためにこのようなフィルタを書くことができます。

更新

これは、変換された文字列 "Protected:"を取得して削除する必要がある、改訂版の関数です。

function remove_protected_text($title) {
    $protected = __('Protected: %s');
    $protected = preg_replace('/ %s/', '', $protected);

    $match = "/${protected}/";
    $replacement = '';

    $title = preg_replace($match, $replacement, $title);

    return $title;
}
add_filter( 'the_title', 'remove_protected_text');

基本的な変更点は、__()関数を使用して保護された文字列を変換し、それから余分なビットを削除することです。 これはちょっと厄介なことなので、もっと良い方法があると確信していますが、私のテストではうまくいきます。

私はこれをスペイン語版のWordPressで試してみましたがうまくいったので、あなたのプロジェクトでうまくいくかどうか教えてください。