update_post_metaとdelete_post_metaをフックする方法は?


29

私はまだこの全体を物事に夢中にさせるのに苦労していますので、私は本当に次のタスクをやろうとしています:

場合はupdate_post_meta、その後解雇かどうかを確認されたmeta_keyものに等しいです(私は特定のmeta_keyが使用されている場合、一部のコードをトリガします)。私が探しているメタキーの場合、$post->ID更新されるメタキーを知る必要があるコードを実行します。

delete_post_meta上記のように逆の操作を行う必要もあります。

誰もがにフックするためのいくつかのコード例を私に提供することができますupdate_post_metaし、delete_post_meta

回答:


45

update_post_metaフックは、より一般的なから呼び出されるupdate_metadata()関数で、あなたが直接それを見つけていない可能性があります。3つのフックは次のとおりです。

  • update_post_metadata、メタデータの更新を「ハイジャック」して他の操作を実行できるフィルター。ブール値を返す関数を接続すると、そこで実行が停止し、ブール値が返されます。
  • update_post_meta、データベースでデータが更新されるに呼び出されるアクション。
  • updated_post_meta、データベースでデータが更新されたに呼び出されるアクション。

メタキーがデータベースにまだ存在していなかった場合は、update_metadata()に制御を渡すadd_metadata()同様のフックを持っている、add_post_metadataadd_post_meta、とadded_post_meta。これupdate[d]_post_metaは呼び出される前に発生します。ですから、メタキーが追加されたときに何かをしたい場合、更新、両方にフックするようにしてくださいupdate*add*フック-しかし一方であることの通知updated_*added_*行動が似たパラメータを渡す、update_*add_*(いないadd_post_meta最初のメタIDを渡しません) 。

delete_metadata()同様のフックがあります:delete_post_metadatadelete_post_metaおよびdeleted_post_meta

サンプルコード:

add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_do_something( $post_id, $meta_value );
    }
}

add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_undo_something( $post_id );
    }
}

このためのスーパーthx。私はupdate_post_meta使用することに気づいていてupdate_metadata、そこにはフックがadded_post_metaありましたupdated_post_metaが、それは私が得ることができる限りです。使い方がわかりませんでした。しかし今、私はそれを持っていると思う:)
ブレイディ

3
具体的には、フックはupdated_{$post_type}_meta
ベンジャミンインタル

8

1月の回答は、カスタムメタデータが[投稿の編集]ページから削除される場合を除き、上記の内容をほぼカバーしています。これは、wp-admin / admin-ajax.phpの呼び出しを介して、メタデータの下にある[削除]ボタンをクリックするとすぐに非同期に発生します。残念ながら、その呼び出しdelete_metadata()はmeta.php の関数をバイパスし、delete_meta()代わりにwp-admin / includes / post.phpを呼び出します(wp-includes / post.phpと混同しないでください)。

delete_postmeta(削除前)とdeleted_postmeta(削除後)の2つのアクションがまだ使用できます。どちらも$midメタデータのID(キーではない)である単一のパラメーターを受け入れます。次を使用してメタデータオブジェクトを取得できます。

$meta = get_post_meta_by_id($mid);  

meta_id、post_id、meta_key、abd meta_valueのオブジェクトを返します。もちろん、deleted_postmetaメタデータが削除されたget_post_meta_by_id()と呼ばれるまでに動作しない(このアクションは役に立たない)

投稿の編集ページからカスタムメタデータを更新する場合も同様です。update_metadata()meta.php の関数(およびそのアクション)は呼び出されませんが、update_meta()代わりにwp-admin / includes / post.php の関数が呼び出されます。ここで再び2つのアクション、update_postmetaそしてupdated_postmeta。引数は、$ meta_id、$ post_id、$ meta_key、$ meta_valueです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.