apply_filters関数とその変数の説明


16

「simplr form registration」プラグインの例を使用して、PHPを使用してhtmlフォームを作成する方法を学習しています。

私はこのコードを見ています:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

ここで何が起こっているのか説明してください-関数が何をするのか、なぜ「simplr-reg-instructions」と「simplr-reg」が必要なのですか?

この行が単純にできないのはなぜですか:

$form .= 'Please fill out this form to sign up for this site' ;

関数リファレンスを読みましたが、それでも理解できません。

回答:


22

その行は、2つの異なる説明を必要とする2つの異なる関数を使用しています。

__()

これは翻訳機能です。設定が正しく行われている場合、事前に翻訳された文字列のリストから最初のパラメーターを翻訳します。インストール済み環境に、この関数が使用するコンパイル済みの翻訳が含まれている場合、それを使用します。もちろん、プラグインは独自の翻訳をパッケージ化する必要があるため、2番目のパラメーターです。simplr-reg告げる__()文字列の翻訳があること'Please fill out this form to sign up for this site'に関連した翻訳ファイルにする必要があります'simplr-reg'(これはによって以前のプラグインで行われているload_plugin_textdomain()機能)。

次に、関数は翻訳を返します。返す翻訳がない場合(たとえば、現在の言語にコンパイル済みの翻訳がない場合、文字列にそのパッケージ用のコンパイル済みの翻訳がない場合など)、元の入力が返されます。

したがって、英語のWordPressサイトの__( 'This', 'simplr-reg' )場合、機能的にはと同じ'This'です。ローカリゼーション(ローカリゼーション)の詳細については、コーデックスをご覧ください。

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters()

この関数を使用すると、必要に応じてプラグインが使用する値をフィルタリングできます。これは、プラグイン開発者として把握すべき主要な概念の1つです。WordPressは、基本的にアクセスポイントであるフックを介して拡張され、プラグインのアクションの実行時間を調整したり、WordPressが使用する情報やデータを操作したりできます。

尋ねたコードの断片などのデータを操作するには、関数を使用しますadd_filter()。これがどのように機能するかの基本的な例を次に示します。

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

おそらく、最初の引数はそこにあるでしょう。add_filter上記で使用したものと同じです。これはフック名です。2番目の引数はフィルターコールバックです。関数への有効なコールバックである必要があります(コールバックの詳細については、こちらをご覧ください)。そのコード行には、「'simplr-reg-instructions'フックが実行されると、指定したコールバックで関数を実行する」と書かれています。apply_filters()最初の引数にあるフックを実行します。つまり、本質的には「このフックに登録されているすべての関数を実行する」という意味です。apply_filters次に、他のすべての引数(この場合は'Please fill out this form to sign up for this site')をそのフィルターの関数に渡します。したがって、上記で使用したコールバックは次のようになります。

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

WordPressには、フィルター(ここで使用している種類)とアクションの2種類のフックがあります。2つの主な違いは、フィルターは何かを返すことを期待し、アクションはそれを返さないことです。そのため、このフィルターの場合、上記の例ではhtmlを追加し'Please fill out this form to sign up for this site'て返します。

アクションとフックの詳細については、こちらをご覧ください:

http://codex.wordpress.org/Plugin_API


ジョン、どうもありがとう。素晴らしい答えです!しかし、私は、プラグインファイル内の一つでも「ADD_FILTER( 『simplr-REG-指示』、...」の行を見つけることができないようどのようによりapply_filterラン。?
アッシュ

1
フックにフィルターが追加されていない場合は、元の入力をすぐに返します。プラグインが使用するためのフィルターはありません。必要な場合や使用したい場合に使用できるため、プラグイン自体を変更する必要はありません。
ジョンPブロッホ

+1優れた説明-ドキュメントのように読みます;
エディB

+1すばらしい答え、まさに探していたもの、私は非常に混乱していたが、今ではすべてがはっきりしている;)
doz87

5

ここには2つの異なる機能がありapply_filters__()

apply_filters関数は、独自のコールバック関数と関数を使用して変数の値を変更/編集できるWordPressの方法ですadd_filter。多くの引数を受け入れますが、重要な引数は最初の2つです。

$something = apply_filters( $tag, $value, $var ... );

$ tagは、add_filterたとえばで使用されるフィルターフックの名前です。

add_filter($tag,callback_function);

$ valueは、変更または編集できる実際の値です。

$ varは、1つ以上のコールバック関数が使用できる変数です。

__() 関数は翻訳に使用されます:

__($message,$text_domain);

$ messageは、翻訳する実際のメッセージです。

$ text_domainは、プラグインまたはテーマの翻訳を読み込むために使用されるテキストドメインタグです。 load_plugin_textdomain()

それは何ですか?

ローカライズモジュールで$ messageの翻訳を検索し、その翻訳をPHPのreturnステートメントに渡します。$ messageの翻訳が見つからない場合、$ messageを返します。

この場合、2つの関数は同じように機能します。apply_filtersは、simplr-reg-instructionsフィルターフックに関連付けられたコールバック関数を、テキストを使用して「このサイトにサインアップするにはこのフォームに記入してください」の翻訳値を送信します。のドメインsimplr-reg


Bainternet、どうもありがとう!どのようにそれがプラグイン・ファイル内の行「ADD_FILTER( 『simplr-REG-説明書』」私はいずれかを見つけることができないということです?
アッシュ

プラグインの機能を拡張またはフィルタリングしたい開発者に残されたフック。
-Bainternet

ここでadd_filterは必要ありませんか?理由がわかりません。apply_filtersは、add_filter関数によってフックに関連付けられているすべての関数を実行すべきではありませんか?
アッシュ

apply_filtersあなたが使用して独自の独自の関数をフックすることができますプレースホルダはありませんadd_filterので、あなたがあなた自身の自身を追加しない限り、ADD_FILTERは全く期待されていない
Bainternet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.