web-dev-qa-db-fra.com

Avant de supprimer le message

J'essaie de mettre à jour la valeur de la méta d'un type de publication personnalisé lorsqu'un autre type de publication personnalisée est supprimé.

Lorsqu'un space_rental est supprimé, je dois mettre à jour une méta-valeur sur un espace.

Je ne pense pas pouvoir utiliser delete_post car il se déclenche après la suppression des métadonnées, mais cela ne fonctionne pas non plus pour moi (que ce soit pour supprimer le message ou vider la corbeille).

Voici la fonction et en dessous, la structure des métadonnées pour chaque type de publication.

//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';
        }
    }
}
}

La méta 'space' post_type est stockée comme ceci:

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
),
);

Ce méta post_type 'space_rental' est stocké comme ceci:

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

si vous voulez l'attraper lorsque l'utilisateur supprime (signifie cliquer sur la corbeille sur le post), la solution possible consiste à utiliser trash_post hook

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

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

Il y a un crochet post

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