サポート » プラグイン » return apply_filters で再帰呼び出し?

  • 解決済 djcomkato

    (@djcomkato)


    Simple Tagプラグインがニーズと少しずれてるので、オリジナルのタグクラウドプラグインを作ろうとしています。
    欲しいのは、タグクラウドの絞り込み機能付きのものです。
    (ワードをクリックすると、絞り込まれてどんどん雲が小さくなる、といった感じ)
    # もし該当のプラグインが存在してたら教えてくださいっ
    # 作る手間が無くなってすごく助かるので ;P

    で、本体の調べていたところ、タグクラウド関連のFunctionだけ再帰呼び出しっぽい記述になっていました

    function wp_generate_tag_cloud( $tags, $args = ” ) {
    global $wp_rewrite;
    $defaults = array(
    ‘smallest’ => 8, ‘largest’ => 22, ‘unit’ => ‘pt’, ‘number’ => 0,
    ‘format’ => ‘flat’, ‘orderby’ => ‘name’, ‘order’ => ‘ASC’,
    ‘topic_count_text_callback’ => ‘default_topic_count_text’,
    );

     (...中略...)

    return apply_filters( ‘wp_generate_tag_cloud’, $return, $tags, $args );
    }

    このような、自分自身を呼び出す apply_filterって、どういった効果があるのでしょう?
    WordPressどころかPHPも勉強中の身には難し過ぎて、トレースできませんでした (o_ _)o

    ざっくりですが検索した限りでは、タグクラウド以外にこのような再帰呼び出ししているものは見つかりませんでした。
    この apply_filters の使い方でのメリットや応用方法について教えてください

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    djcomkatoさん、こんにちは。

    apply_filtersは、フィルターフックを実行する関数で、再帰呼び出しを行っているわけではありません。

    apply_filters( 'wp_generate_tag_cloud', $return, $tags, $args );

    は、wp_generate_tag_cloudという名称のフィルターフックに登録されているプラグイン関数に$return, $tags, $argsらの引数を渡して、生成されたソースコードの改変を行うというのが、実際の動作内容になっています。

    apply_filtersは、WordPressに元々備わっている他にもプラグイン内などで自由に追加できますので、プラグインのプラグインなどというのもこれにより作成することができるのです。

    WordPressはプラグインが肝であることを考えると、apply_filtersは、とても重要な役割を果たしている記述であるとも言えます。

    apply_filtersの他にも、ソースコードを追っていると、do_actionという関数を目にすることがよくあります。
    こちらは、アクションフックが行われるポイントで、apply_filtersがなんらかの値を渡して改変してもらうのとは異なり、do_actionでは、なんらかの動作が行われることが一般的です。

    トピック投稿者 djcomkato

    (@djcomkato)

    jim912さん、早速のご回答ありがとうございます。
    動きを追ってるうちに、フィルターフックをcallと勘違いしてしまったようです。
    失礼いたしました。

    ご返信内容を踏まえて改めて調べたりしましたが、実はまだ腹に落ちておらず、試しに

    return $return;

    return apply_filters( ‘自関数名’, $return, $tags, $args );

    に変更してみましたが、出力に変化はありませんでした。
    とりあえずこうしておけば、良かったりするのでしょうか?
    後者にした場合の弊害があれば、おしえてください。

    P.S.
    単体での「filterとは・・・」「actionとは・・・」という説明は理解できているつもりですが、実際に組み込まれたフックを見てると混乱してくるのは自分だけ・・・?
    不可欠な知識の何かがスポッと抜けてるんでしょうねぇ
    (愚痴っぽくなってしまった ^^;)

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「return apply_filters で再帰呼び出し?」には新たに返信することはできません。