web-dev-qa-db-ja.com

投稿を削除する前に

別のカスタム投稿タイプが削除されたときに、そのカスタム投稿タイプのメタの値を更新しようとしています。

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
);
1
Eckstein

ユーザーが削除したときにそれをキャッチしたい場合(投稿のゴミ箱をクリックすることを意味します)、考えられる解決策はtrash_postフックを使うことです

add_action( 'trash_post', 'my_func_before_trash',999,1);

function my_func_before_trash($postid){
        //my custom code
}
2
sdx11

ゴミ箱ポスト フックがあります

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
}
0
Tunji