Ich habe ein System entwickelt, in dem ich 2 Optionen habe – LifeSpawn des Entwurfs und LifeSpawn des veröffentlichten Posts (Ganzzahl, die Tage markiert).
Wenn Post veröffentlicht wird, wird das genaue Datum und die Uhrzeit der Veröffentlichung als postmeta
gespeichert, außerdem wird zu dieser Zeit lebensrettung hinzugefügt und dieser Wert wird in der database als Ablaufdatum-Zeit gespeichert, dasselbe gilt für Entwurf ( aka wenn Post gespeichert wird).
Mein aktuelles System läuft so:
metadata
aus der database in der while
Schleife abgerufen if
statement verglichen metadata
aus der database in der while
Schleife abgerufen if
statement verglichen Ich bin super besorgt, dass dieses System / Server hart ausfällt, wenn Beiträge 10 000 – 15 000 oder sogar ein paar tausend sind. Es ist wichtig, dass Beiträge (besonders veröffentlicht), die die Zeit überschritten haben, entfernt werden.
Welche anderen Optionen habe ich?
Ideen:
'offset'
, um Beiträge in Gruppen zu teilen, und zwar in kleineren page_per_page
aber es funktioniert nicht, wenn page_per_page
auf -1 gesetzt ist Aktualisieren:
Ich habe Ihre Ratschläge gehört und versucht, nach dem "expiry date"
abzufragen:
if
statement nicht zu funktionieren scheint //Current date-time $now = date( 'Ymd H:i:s' ); //Let's say it's 2015-12-24 21:00:00 (9PM) //Get all published posts that are over the deadline $published_posts = new WP_Query( array( 'posts_per_page' => -1, 'post_type' => 'my-post', 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'post_publish_deadline', //string eg 2015-12-24 15:00:00 (3PM) 'value' => $now, 'type' => 'DATETIME', 'compare' => 'have_posts() ) { $published_posts->the_post(); //Get postmeta deadline and format it for if statement $publish_deadline = get_post_meta( get_the_ID(), 'post_publish_deadline', true ); //If statement doesn't seem to work without this step $format_publish_deadline = date( 'Ymd H:i:s', strtotime( $publish_deadline ) ); //Check if it exists just in case if( !empty( $format_publish_deadline ) ) { //Additional check if time for that guy is over just in case if( $format_publish_deadline get_the_ID(), 'post_status' => 'draft' ) ); //Get lifespawn option $draft_to_delete_lifespawn = $my_option[ 'draft-lifespawn' ]; //Build a new draft expiration date-time -> now + lifespawn in hours $draft_deadline = date( 'Ymd H:i:s', strtotime( $now . ' + ' . $draft_to_delete_lifespawn . ' hours' ) ); //Save new draft expiration date-time update_post_meta( $post->ID, 'post_draft_deadline', $draft_deadline ); } } } //END while wp_reset_postdata();
Sie können sich verbessern, indem Sie die “Ablauf” -Zeit des Posts als Meta statt der Veröffentlichungszeit speichern. Auf diese Weise können Sie nach Posts mit Meta suchen, die kleiner als die aktuelle Zeit sind, und sie entcasting, ohne dass Sie alle Posts durchlaufen müssen.
Nachteil ist, dass Sie entscheiden müssen, wie Sie Änderungen an der Lebensspinnzeit handhaben, ignorieren Sie einfach diesen Randfall oder passen Sie alle Beiträge an.