問題描述
我仍然努力讓我的頭圍繞整個掛鉤的東西,所以我真的堅持嘗試做以下任務:
如果 update_post_meta 被觸發,請檢查 meta_key 是否等於某事 (如果使用特定的 meta_key,我想觸發一些程式碼) 。如果我正在尋找的元鍵,那麼執行一些程式碼,需要知道正在更新的元鍵的 $post->ID
。
我也需要掛鉤到 delete_post_meta 那樣的反向,如上所述。
有人可以為我提供一些掛鉤到 update_post_meta 和 delete_post_meta 的示例程式碼?
最佳解決方案
update_post_meta
鉤子從更通用的 update_metadata()
功能呼叫,因此您可能沒有直接找到它。三個鉤子是:
-
update_post_metadata
,一個過濾器,它允許您將後設資料更新到”hijack” 並執行其他操作。如果你連線一個返回一個布林值的函式,那麼執行就停止並返回布林值。 -
update_post_meta
是在資料庫中更新資料之前呼叫的操作。 -
updated_post_meta
是在資料庫中更新資料後呼叫的操作。
如果資料庫中沒有元金鑰,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 答案涵蓋了以上幾點,除了從 「編輯帖子」 頁面中刪除自定義後設資料的情況之外。一旦您單擊後設資料上的”Delete” 按鈕,透過呼叫 wp-admin /admin-ajax.php,就會非同步發生。不幸的是,這個呼叫繞過了 meta.php 中的 delete_metadata()
函式,並在 wp-admin /includes /post.php 中呼叫 delete_meta()
(而不是與 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()
將無法正常工作 (哪一種使得該動作無效)
從 「編輯帖子」 頁面更新自定義後設資料也是如此。不呼叫 meta.php 中的 update_metadata()
函式 (及其動作),而是在 wp-admin 中包含/post.php 中的 update_meta()
函式。 update_postmeta
和 updated_postmeta
兩個動作。引數是 $ meta_id,$ post_id,$ meta_key,$ meta_value 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。