私はまだ頭の中で物事に夢中になっているので、次のタスクをやろうとしています。
Update_post_metaが起動した場合は、meta_keyが何かに等しいかどうかを確認してください(特定のmeta_keyが使用されている場合はコードをトリガーします)。探しているメタキーがあれば、更新されているメタキーの$post->ID
を知る必要があるコードを実行します。
私はdelete_post_metaにもフックする必要があります。そのような種類のものは上記のように逆になります。
Update_post_metaとdelete_post_metaにフックするためのコード例を私に提供できる人はいますか?
update_post_meta
フックは、より一般的な update_metadata()
関数から呼び出されるため、直接見つけることはできません。 3つのフックは次のとおりです。
update_post_metadata
、メタデータの更新を「ハイジャック」して他の操作を実行できるフィルター。ブール値を返す関数を接続すると、そこで実行が停止し、ブール値が返されます。update_post_meta
、データがデータベースで更新される前に呼び出されるアクション。updated_post_meta
、呼び出されたアクションafterデータベースでデータが更新されます。メタキーがまだデータベースに存在しなかった場合、update_metadata()
は制御を add_metadata()
に渡します。これには、同様のフックadd_post_metadata
、add_post_meta
、およびadded_post_meta
があります。これは、update[d]_post_meta
が呼び出される前に発生します。したがって、メタキーが追加または更新されたときに何かをしたい場合は、必ずupdate*
フックとadd*
フックの両方にフックしてください-ただし、 updated_*
とadded_*
アクションは同様のパラメーターを渡しますが、update_*
とadd_*
は渡しません(add_post_meta
は最初にメタIDを渡しません)。
delete_metadata()
には同様のフックがあります:delete_post_metadata
、delete_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 );
}
}
Janの回答は、カスタム投稿がEdit Postページから削除された場合を除いて、上記のほとんどをカバーしています。これは、wp-admin/admin-ajax.phpの呼び出しを介して、メタデータの下にある[削除]ボタンをクリックすると同時に非同期的に行われます。残念ながら、これはmeta.phpのdelete_metadata()
関数を迂回し、代わりにwp-admin/includes/post.phpのdelete_meta()
を呼び出します(wp-includes/post.phpと混同しないでください)。
まだ使用できるアクションは2つあります。delete_postmeta
(削除前)、およびdeleted_postmeta
(削除後)です。どちらもメタデータのIDである単一のパラメータ$mid
を受け入れます(not the key)。以下を使用してメタデータオブジェクトを取得できます。
$meta = get_post_meta_by_id($mid);
meta_id、post_id、meta_key、およびmeta_valueを持つオブジェクトを返します。もちろん、deleted_postmeta
が呼ばれるまでにメタデータは削除されているのでget_post_meta_by_id()
は機能しません(ちょっとそのアクションが役に立たなくなります)
投稿の編集ページからカスタムメタデータを更新する場合も同様です。 meta.phpのupdate_metadata()
関数(およびそのアクション)はnot呼び出されますが、代わりにwp-admin/includes/post.phpのupdate_meta()
関数が呼び出されます。ここでもupdate_postmeta
とupdated_postmeta
の2つのアクションがあります。引数は$ meta_id、$ post_id、$ meta_key、$ meta_valueです。