サポート » 使い方全般 » 同じ関数で別の処理をさせたい場合

  • 解決済 puniler

    (@puniler)


    bbp_save_extra_fieldsという関数に下記のように異なった処理をさせたい場合、何か良い方法はありませんか?

    function bbp_save_extra_fields($topic_id = 0) {
    //掲示板作成用のカスタムフィールドを保存する処理
    }
    function bbp_save_extra_fields($reply_id) {
    //コメント用のカスタムフィールドを保存する処理
    }

    BBPressという掲示板作成プラグインでのお話しです。

    掲示板を作るときと、そこにコメントするときの両方でカスタムフィールドを追加するために、上のコードも両方必要なのです。が、

    ご覧の通り、同じ関数でありながら、function bbp_save_extra_fields(ココ)のところの書き方が異なっているため、両方の処理を書くことができずにおります。

    どなたか巧い書き方をご存知であればぜひご教示くださいませ。

    ご参考に、カスタムフィールド追加コードが載っているページを貼っておきます。
    (片方ずつなら下記リンク先のコードで処理できます。)

    【カスタムフィールド処理の参考ページ】
    ■掲示板作成用のカスタムフィールド
    https://wp-dreams.com/articles/2013/06/adding-custom-fields-bbpress-topic-form/
    ■コメント用のカスタムフィールド
    https://bbpress.org/forums/topic/add-custom-text-fields-to-reply-form/

    • このトピックは punilerが1 年前に変更しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • ishitaka

    (@ishitaka)

    こんにちは

    この場合における、add_action() によるフックする関数名は任意に指定することができます。bbp_save_extra_fields() である必要はありません。
    よって、下記のように関数を分けるといいかと思います。

    add_action( 'bbp_new_reply', 'bbp_save_reply_extra_fields', 10, 1 );
    add_action( 'bbp_edit_reply', 'bbp_save_reply_extra_fields', 10, 1 );
    
    function bbp_save_reply_extra_fields( $topic_id = 0 ) {
    //掲示板作成用のカスタムフィールドを保存する処理
    }
    
    add_action( 'bbp_new_topic', 'bbp_save_topic_extra_fields', 10, 1 );
    add_action( 'bbp_edit_topic', 'bbp_save_topic_extra_fields', 10, 1 );
    
    function bbp_save_topic_extra_fields( $reply_id ) {
    //コメント用のカスタムフィールドを保存する処理
    }
    puniler

    (@puniler)

    こんにちは!今日も暑いですね。
    素早く正確なご回答、いつもどうもありがとうございます。感謝です。
    仰るようにしてできました。

    ところで、
    >add_action() によるフックする関数名は任意に指定することができます。
    というのは、何によって判断できたのですか?

    ひょっとして、よくある
    add_action( 'aaa', 'bbb', 10, 1 );
    の「bbb」って、自由に決められるのが普通なのでしょうか?

    ishitaka

    (@ishitaka)

    add_action() のフックされる関数名は、自由に決めることができます。
    自由といっても、既存の関数名などは使用できません。あとから追加するプラグインなども考慮して、重複しないような名前にする必要があります。

    余談ですが、PHP バージョン 5.3 以上であれば、無名関数を使用することもできます。
    http://us2.php.net/manual/ja/language.types.callable.php

    puniler

    (@puniler)

    そうなのですね!
    functions.phpに書いてね。というコードでadd_actionの部分を見るきに、なんか変な名前だなぁと思ったことがありますが、なるほど。みなさん勝手にお考えになっていたわけですか。納得です。

    リンクもありがとうございます。ただマニュアルページは呪文ばかりで大変ですね。少しずつ理解していきたいと思います。

    今回も追加質問にまでご回答頂き、誠にありがとうございます。

    • この返信は1 年前に  puniler さんが編集しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「同じ関数で別の処理をさせたい場合」には新たに返信することはできません。