web-dev-qa-db-fra.com

Puis-je faire la différence entre «Supprimer définitivement le message» et «Vider la corbeille» et faire quelque chose pour chacun en conséquence?

Je travaille actuellement sur le développement d'un plugin avec un type de publication personnalisé "Dealer Location". (Pas pertinent pour la question, juste un peu d'histoire)

Lorsqu'un message est dans la corbeille et que "supprimer définitivement" est enfoncé, je dois supprimer ce morceau de méta de chaque utilisateur.

Quand une publication/des publications sont dans la corbeille et que la "corbeille vide" est enfoncée, je dois parcourir CHAQUE emplacement en cours de suppression et faire quelque chose.

J'ai une fonction extrêmement basique juste pour tester quand il fonctionne en ce moment, car j'ai trouvé tous les autres écrous et boulons (suppression des méta utilisateur, etc.):

public function wcmdl_remove_deleted_location_users(){

    die;
} 

Et l'action que j'utilise est ..:

$this->loader->add_action('before_delete_post', $plugin_admin, 'wcmdl_remove_deleted_location_meta');

J'ai également essayé d'utiliser le crochet 'delete_post' et dans les deux cas, la fonction se déclenche quand on s'y attend. Cependant, il se déclenche à la fois sur "supprimer définitivement" ET sur "corbeille vide".

Existe-t-il une sorte de hook ou une instruction if que je peux utiliser pour faire la différence entre la suppression en masse et la suppression unique dans ce cas? Sinon, serait-il viable de transmettre une valeur via ajax/js en fonction du bouton enfoncé et de l'utiliser pour déterminer l'action prise dans une fonction via une instruction if/else?

1
Syd Jansen

Ainsi, comme leymannx l'a souligné dans son commentaire, le crochet "delete_post" gère en fait les deux scénarios que je cherchais, car il semble savoir exécuter un "pour chaque message supprimé, faire x" lorsque "Empty Trash" est cliqué et sera également "do x" lorsque "Delete Post définitivement" est cliqué!

Mon code final a fini par ressembler à quelque chose comme:

    public function wcmdl_remove_deleted_location_users(){

      $currentpost    = get_the_ID();
      $parentid       = wp_get_post_parent_id( $currentpost );

      if( get_post_type() == 'dealer_location' ) {
        //do stuff involving $currentpost and $parentid here...
      }
    }

En gardant à l'esprit que cela est utilisé dans un format standard de plugin et non directement dans le fichier functions.php d'un thème enfant, ce crochet a été placé dans le fichier "includes> class- [plugin name] .php" ..:

        $this->loader->add_action('delete_post', $plugin_admin, 'wcmdl_remove_deleted_location_users');

Si vous deviez essayer de faire la même chose via votre fichier functions.php, la structure de ceci serait plutôt:

add_action('delete_post', 'wcmdl_remove_deleted_location_users');
1
Syd Jansen