サポート » 使い方全般 » add_action() の動作について

  • 解決済 wildpiyo

    (@wildpiyo)


    あるテーマを子テーマで使っており、自分で追加した functions.php に

    add_action( 'edit_post', 'ファンクション名' );

    を記述しています。記事の公開や更新では何ともないのですが、
    外観->メニュー 画面にある[メニューを保存]を押すと、functions.php にエラーがある旨のメッセージが大量にでます。
    アクションフックを save_post にしても同じです。
    この処理が発生してほしいタイミングは、カスタムフィールドが更新したときで良いので

    add_action( 'updated_postmeta', 'ファンクション名' );

    と変えてみました。
    これでメニュー編集画面でエラーは出なくなったのですが、updated_postmeta で良いのか分かっていません。実際にカスタムフィールドを修正しても見た目何も起こらないので。
    公開や更新ボタンを押した時には、ちゃんと実行されて?いるようですが。
    この updated_postmeta は、カスタムフィールドにある更新や削除ボタンで実行されるものではないのでしょうか?

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

    (@jim912)

    外観->メニュー 画面にある[メニューを保存]を押すと、functions.php にエラーがある旨のメッセージが大量にでます。

    メニューの1つ1つの項目は、nav_menu_item という投稿タイプで保存されますので、その処理の際にエラーとなるコードが含まれているのでしょう。

    add_action( 'edit_post', 'ファンクション名', 10, 2 );
    add_action( 'save_post', 'ファンクション名', 10, 2 );

    とすると、第2引数で処理する投稿のオブジェクトを取得できますので、post_type プロパティを参照して、処理する投稿タイプかどうか判定するとよいかと思います。
    また、save_post_{$post->post_type} というアクションを用いて、実行される投稿タイプを絞ることも可能です。

    どのような処理を行おうとしているかわかりませんが、updated_postmeta はカスタムフィールドの1つ1つのアップデート処理で実行されますので、edit_post や save_post で済む処理を updated_postmeta で行うことは、1回で済む処理を複数回やることになりますので、避けるべきかとは思います。

    トピック投稿者 wildpiyo

    (@wildpiyo)

    jim912さま、分かりやすい説明ありがとうございました!

    メニュー編集画面は投稿タイプだったんですね。
    save_post_{$post->post_type} という方法もあったのですね。
    カスタム投稿タイプでやっていたので、これで上手くいきました!
    ありがとうございます。

    トピック投稿者 wildpiyo

    (@wildpiyo)

    解決済みにするのを忘れていました。。。

    もしよろしければ、
    https://ja.forums.wordpress.org/topic/158823
    の最後の投稿にあるコードの改善についてもご教示いただければ幸いです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「add_action() の動作について」には新たに返信することはできません。