web-dev-qa-db-de.com

Wie kann ich eine Funktion nur einbinden, wenn ich einen Beitrag dauerhaft löschen muss?

Ich muss eine Funktion nur einbinden, wenn ich einen Beitrag dauerhaft aus der Datenbank lösche. Ich habe versucht, den Hook 'before_delete_post' zu verwenden. Er wird jedoch sowohl im Papierkorb als auch dauerhaft gelöscht.

Die Funktion wp_delete_post () ruft wp_trash_post () auf und sollte die Verarbeitung beenden, aber es sieht so aus, als würde wp_delete_post () erneut aufgerufen, nachdem der Beitrag verworfen wurde.

Ich habe diese Frage gesehen: Wordpress Delete Hook mit der Funktion wp_delete_post? . Mein Bedürfnis ist genau das Gegenteil davon.

1
romulodl

Das Problem war das Plugin "Sitewide-Tags", das den natürlichen WP -Fluss fehlerhaft verhält. Eine Funktion namens sitewide_tags_post_delete() ist in 'trash_post' eingebunden und ruft wp_delete_post() auf, um den Beitrag im Hauptblog zu löschen.

Nach dem @ Stephen-Ansatz habe ich Folgendes getan:

add_action('before_delete_post', 'my_deleted_post');
function my_deleted_post($post_id){
  global $blog_id;   
  if($blog_id == <main_blog_id>){ // usually is 1
    return false;
  }

  //do whatever you need :)
};
1
romulodl

before_delete_post wird nicht aufgerufen, wenn ein Beitrag nur in den Papierkorb verschoben wird.

wp_delete_post() kann zwar Posts in den Papierkorb verschieben (wenn der Post nicht in den Papierkorb verschoben und nicht zwangsweise gelöscht wird): Ruft dazu wp_trash_post() auf und beendet die Funktion, bevor die Aktion before_delete_post ausgelöst wird.

Ich habe dies getestet. Die folgende Funktion wird nur dann "sterben", wenn Sie einen Beitrag endgültig löschen, nicht jedoch, wenn er auf den Papierkorb beschränkt ist. Der wp_die soll zeigen, wann der Anruf getätigt wird - ich empfehle nicht, ihn auf einer Live-Site zu verwenden.

add_action('before_delete_post', 'my_deleted_post');
function my_deleted_post($post_id){
   wp_die(var_dump($post_id));
};

Die Funktion wp_delete_post() finden Sie hier (WP 3.3.1)

6
Stephen Harris