10

WordPress codex を何度も読みましたが、複数の引数が関係している場合に値を返す方法をまだ理解していません。例えば:

function bbp_get_topic_title( $topic_id = 0 ) {
    $topic_id = bbp_get_topic_id( $topic_id );
    $title    = get_the_title( $topic_id );

    return apply_filters( 'bbp_get_topic_title', $title, $topic_id );
}

上記のフィルターには、2 つの引数があります。Iadd_filterの場合、2 つの値を返す必要がありますか、それとも必要なものだけを返す必要がありますか? タイトルが必要な場合、次の例は正しいですか?

add_filter( 'bbp_get_topic_title', 'my_topic_title', 10, 2 );

function my_topic_title( $title, $topic_id ){
  $title = 'my_example_title';
  return $title;
}
4

2 に答える 2

19

その通りです。

フィルターを登録する (または基本的に を呼び出すapply_filters) ときは、少なくとも 2 つの引数 (適用するフィルターの名前とフィルターが適用される値) を指定して関数を呼び出す必要があります。

関数にさらに引数を渡すと、フィルタリング関数に渡されますが、追加の引数が要求された場合に限ります。次に例を示します。

// Minimal usage for add_filter()
add_filter( 'my_filter', 'my_filtering_function1' );
// We added a priority for our filter - the default priority is 10
add_filter( 'my_filter', 'my_filtering_function2', 11 );
// Full usage of add_filter() - we set a priority for our function and add a number of accepted arguments.
add_filter( 'my_filter', 'my_filtering_function3', 12, 2 );

// Apply our custom filter
apply_filters( 'my_filter', 'content to be filtered', 'argument 2', 'argument 3' );

上記のコードでは、content to be filteredが最初に に渡されmy_filtering_function1ます。この関数は のみを受け取りcontent to be filtered、追加の引数は受け取りません。

次に、コンテンツは(によって処理された後my_filtering_function1)に渡されmy_filtering_function2ます。この場合も、関数は最初の引数のみを受け取ります。

最後に、コンテンツが関数に渡されmy_filtering_function3ます (前の 2 つの関数によって変更されているため)。今回は、代わりに 2 つの引数が関数に渡されますが (これを指定したため)、argument 3引数は取得されません。


apply_filters()ソースを参照してください。

于 2012-12-10T08:48:57.523 に答える