Löschen Sie automatisch Anhänge, die älter als x Tage sind

Gibt es eine Methode zum automatischen Löschen von Anlagen, die älter als x Tage sind? Weil ich hin und wieder habe ich am Ende über 10 Millionen Bilder und database wächst so groß, dass es Website aufgrund begrenzter CPU verlangsamt

Solutions Collecting From Web of "Löschen Sie automatisch Anhänge, die älter als x Tage sind"

Bist du wirklich sicher, dass du das machen willst? Was ist mit all den Posts, in denen diese “alten” Anhänge verwendet werden? Für Anhänge, die für Dinge wie “Featured Image” verwendet werden, wird WP das für Sie übernehmen. Für die Verwendung eines Anhangs in post_content, z

 download PDF 

Sie werden mit “gebrochenen” Links enden.

Aber wenn Sie wirklich sicher sind, können Sie es mit WP-Cron tun.

Eine schnelle Lösung, die wahrscheinlich nicht alles tut, was Sie tun müssten, sieht ungefähr so ​​aus ( Anmerkung : Ich habe diesen Code nicht wirklich getestet, weil ich natürlich nicht löschen möchte Anhänge auf jeder Seite, die ich momentan betreue):

  // using this $num_days global is a kind of a hack but it makes sure that // all of the places where we need X we have the same value // if you were to encapsulate this code into a class // then you could set it as a class const global $num_days ; $num_days = 10 ; // hook into cron_scedules to add our "every X days" add_filter ('cron_schedules', 'add_my_schedule') ; // add our cron hook add_action ('my_cron_hook', 'my_cron_func') ; // if our hook is not currently scheduled, then schedule it if (!wp_next_scheduled ('my_cron_hook')) { wp_schedule_event (time (), "$num_days_days", 'my_cron_hook') ; } /** * add our "every X days" to the available schedules */ function add_my_schedule ($schedules) { global $num_days ; $schedules["$num_days_days"] = array ( 'interval' => $num_days * DAY_IN_SECONDS, 'display' => esc_html__("Every $num_days Days"), ) ; return ($schedules) ; } /** * this is the func that will be called when the cron job executes */ function my_cron_func () { global $num_days, $post ; // query for attachments added more than $num_days ago $args = array ( 'post_type' => 'attachment', 'post_status' => 'inherit', 'date_query' => array ( // see https://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters // for more info on this 'before' date_query syntax 'before' => "$num_days days ago", ), 'posts_per_page' => -1, ) ; $old_attachments = new WP_Query ($args) ; while ($old_attachments->have_posts ()) { $old_attachments->the_post () ; wp_delete_attachment ($post->ID, true) ; } // probably not necessary to call wp_reset_postdata(), // since we're in a cron job, but doesn't hurt wp_reset_postdata () ; } 

Stellen Sie sicher, dass Sie den Cron-Job nicht mehr planen, wenn Sie ihn nicht mehr benötigen. Ich überlasse es als eine “Übung für den Leser”, um herauszufinden, wie man das macht (Tipp, siehe Unscheduling Tasks für weitere Informationen).