別のカスタム投稿タイプが削除されたときに、そのカスタム投稿タイプのメタの値を更新しようとしています。
Space_rentalが削除されたら、スペース上のメタ値を更新する必要があります。
delete_post
は、メタデータが削除された後に起動されるので使用できないと思いますが、これは私にとってはうまくいきません(投稿をゴミ箱に捨てたりゴミ箱を空にしたりするのにも)。
ここに関数があり、その下に各投稿タイプのメタデータの構造があります。
//When a space_rental is deleted, we release the space slots they had saved
add_action( 'before_delete_post', 'tps_delete_space_rental' );
function tps_delete_space_rental( $postid ){
if (get_post_type($postid) != 'space_rental') {
return;
}
//Loop through the selected slots in the rental
$selectedSlots = get_post_meta($postid, 'selectedSlots', true);
foreach ($selectedSlots as $slot) {
$spaceSlots = get_post_meta($slot['spaceid'], 'allSlots', true);
//Loop through the slots in the space and find the ones that have the rentalID set to the deleted post
foreach ($spaceSlots as $sSlot) {
if($postid == $sSlot['details']['rentalID']) {
$sSlot['details']['slotStatus'] = 'open';
}
}
}
}
'space' post_typeメタは次のように格納されています。
allSlots => array(
'timestamp' => '123456789', //timestamp representing this slot
'details' => array(
'slotStatus' => 'open', //this is either open or filled
'slotUser' => 123, //The ID of the user who owns the rental using this slot
'rentalID' => 345, //The post_id of the 'space_rental' that is using this slot
),
);
この 'space_rental' post_typeメタは次のように格納されています。
selectedSlots => array(
'spaceSlots' => array(
123456789, 654321987, 9876432654, etc...,// An array of timestamps in this rental
),
'spaceid' => 789, //The post_id of the 'space' where this rental is
);
ユーザーが削除したときにそれをキャッチしたい場合(投稿のゴミ箱をクリックすることを意味します)、考えられる解決策はtrash_postフックを使うことです
add_action( 'trash_post', 'my_func_before_trash',999,1);
function my_func_before_trash($postid){
//my custom code
}
ゴミ箱ポスト フックがあります
add_action( 'trash_post', 'my_func' );
function my_func( $postid ){
// We check if the global post type isn't ours and just return
global $post_type;
if ( $post_type != 'my_custom_post_type' ) return;
// My custom stuff for deleting my custom post type here
}