Das Plugin überschreitet das Speicherlimit

Ich wp_delete_post Massen von Posts von meiner WordPress-Seite mit der function wp_delete_post und Kategorien mit wp_delete_category . Das sind ungefähr 100.000 Posts und 4.000 Kategorien, und nach einer Weile bekomme ich einen PHP Error

PHP Fatal error: Allowed memory size of ... bytes exhausted

Das mache ich in meinem Code:

 // get all IDs from the posts and categories $delete_categories = $wpdb->get_col("SELECT DISTINCT(j.term_id)..."); $delete_posts = $wpdb->get_col("SELECT DISTINCT(j.post_id)..."); $delete_parent_categories = $wpdb->get_col("SELECT tt.parent FROM $tbl_term_taxonomy tt ..."); // I removed the SQL statements for a better reading foreach ($delete_posts as $dp) { echo "deleting post ".$dp."\n"; wp_delete_post($dp, true); unset($dp); } unset($delete_posts); foreach ($delete_categories as $dc) { echo "deleting category ".$dc."\n"; wp_delete_category($dc); unset($dc); } unset($delete_categories); foreach ($delete_parent_categories as $dc) { echo "deleting category ".$dc."\n"; wp_delete_category($dc); unset($dc); } unset($delete_parent_categories); 

Das Löschen der Posts funktioniert, das Löschen einiger Kategorien funktioniert auch – aber irgendwann wird das Speicherlimit überschritten und das Skript wird beendet. Die Einstellung des Speicherlimits auf 1024 MB sieht für mich nicht wie eine perfekte Lösung aus.

Gibt es eine Möglichkeit, den Speicher freizugeben, den die WordPress-functionen zugewiesen haben?

Solutions Collecting From Web of "Das Plugin überschreitet das Speicherlimit"

Der Code, den Sie verwenden, verwendet auch WordPress-functionen, die zuerst Posts (und andere relevante Daten) zuerst in den Speicher laden und sie dann mit dem Objekt-Cache zwischenspeichern. Um also 100.000 Posts zu löschen, wird Ihr Code versuchen, jeden Post im Speicher zu laden, was sehr viel Speicher beanspruchen kann. Ich bin mir nicht sicher, wie hoch der PHP-Speicher in Ihrem Fall ist, aber Sie können entweder die Löschung auf 1000 oder 5000 Beiträge gleichzeitig beschränken oder den PHP-Speicher erhöhen.

Bei so vielen zu löschenden Beiträgen ist es besser, den Einschränkungen des Webservers zu entgehen und wp-cli relevantes Beispiel zu verwenden . Die andere Alternative besteht darin, keinen Live-Server zu verwenden, sondern alles auf den lokalen Entwicklungsserver auszulagern, den Code dort auszuführen und die Daten zurück zu laden.

Ich empfehle deine erste Codezeile

 wp_suspend_cache_addition( true ); 

Dadurch wird verhindert, dass die Daten dem Cache- und Bloat-Speicher hinzugefügt werden.