2009-07-29 13 views
1

私はこれ(WP Gutsを理解していること)を新しく知っていて、HooksとFiltersをよく理解したかったので、Codexから正しく取得できません。 wordpress:actions、filters&hooks

は、私は簡単なテストをした、

アイデアは、「保護された:」消去するためにget_title()メソッドをオーバーライドすることでページが保護されている場合は、タイトルからの文章を、そこprotected_title_formatフィルタであり、私はCODEXから得ることができるもののために

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

、私はそのフィルタを削除し、自分自身を追加する必要があり、のように:私はポストtemplate.phpでその行が指定

...それを使用して思いました

私は出力にエコーを得ることができますが、私は$のID(およびそのため、なし$タイトルまたは$ポスト)を取得いけないオフコース、

// Removing action 
function 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); 

function fancy_title($id = 0) { 
    $post = &get_post($id); 
    $title = $post->post_title; 

    echo "I'm the king of the world!... >" . $title . "< & >" . $post . "<"; 

    if (!is_admin()) { 
    if (!empty($post->post_password)) { 
     $protected_title_format = apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s')); 
     $title = sprintf($protected_title_format, $title); 
    } 
    } 
    return apply_filters('the_title', $title, $post->ID); 
} 

のようなものを使用して

remove_action('protected_title_format'); 
apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s')); 

、この方法保護された部分文字列以外のすべてを取り除いたget_title()のコピーです。

誰もが私を説明することができますどのようにこの作品? は


P.S.ありがとう私は学ぶために、これはこの質問のアイデアです。誰かが私に "ちょっと、post-template.phpに行き、それを変更してください"と言う人ではありません。 ? " !

+0

+1は正しいことをしようとしています。 –

答えて

3

これは実際には、あなたが試みているものよりずっと簡単に行うことができます。あなたは正しい軌道にいる。

基本的には、WordPressのタイトルの「保護された」部分を取り除く独自の機能を作成することです。これを行う最も簡単な方法は、preg_replace()を使用して "Protected:"テキストを検索し、それを削除する関数を作成するだけです。文字列を自分のテキストで自動置換することも簡単にできます。

これを行うサンプル関数があります。 $タイトルをパラメータとし、変更されたバージョンを返します。

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

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

実際にフィルタフックに関数を追加します。このケースで私たちが興味を持っているフィルターフックは 'the_title'です。そこで、我々は我々だけで書いた関数の下に次の行を追加します。これは、「the_title」フィルタに私達の機能remove_protected_text()を追加

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

。この場合、3番目の引数を使用してフィルタの優先度を10に設定しました。これは完全にオプションですが、このフィルタはかなり優先度が低いと判断されます。

だから、すべて一緒に我々のコードは次のようになります。

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のテキストの出力部分のほとんどのために、このようなフィルタを書くことができます。基本的にはここでの唯一の変更は、我々が使用していることである

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でテストしたところ、うまくいきましたので、あなたのプロジェクトでうまく動作しているかどうか教えてください。

+0

thxs、私はそれにショットを与える – balexandre

+0

こんにちは、あなたは私の解決策で運があったか? – NerdStarGamer

+0

実際はそうではありません...英語WPでは動作しますが、他の言語では動作しません:)翻訳の前に値を取得する必要があります。 – balexandre