Geplante WordPress-Aufgabe zum Löschen von Zeilen, die älter als 48 Stunden sind

Lesezeit: 3 Minuten

Benutzer-Avatar
VCP

Ich versuche, einen Cron-Job einzurichten, um Zeilen zu löschen, die älter als 48 Stunden sind. Ich habe das noch nie zuvor gemacht und beschlossen, eine geplante WP-Aufgabe zu erstellen. Unten ist mein Code in meiner functions.php Datei. Ich gehe davon aus, dass meine Löschzeile/Abfrage falsch ist. Jede Hilfe wäre willkommen; oder wenn es einfacher geht bin ich auch dafür offen. Vielen Dank.

add_action('init','es4u_delete_old_videos');
add_action('es4u_delete_video','es4u_delete_video_func');

function es4u_delete_video_func() {
    $servername = "localhost";
    $username = "username";
    $password = "pass";
    $dbname = "db";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    DELETE * FROM awdwp_webinar_orders WHERE start_time < DATEADD(HOUR,-48,GETDATE());
}

function es4u_delete_old_videos(){
  if(!wp_next_scheduled('es4u_delete_video')) {
       wp_schedule_event (time(), 'hourly', 'es4u_delete_video');
    }
}

BEARBEITEN: Das ist, was ich jetzt habe, aber Tabellen werden immer noch nicht gelöscht. Irgendeine Idee?

add_action('init','es4u_delete_old_videos');
add_action('es4u_delete_video','es4u_delete_video_func');

function es4u_delete_video_func() {
    global $wpdb;
    $sql="DELETE * FROM awdwp_webinar_orders WHERE start_time < DATEADD(HOUR,-48,GETDATE());";
    $wpdb->query( $sql );
}

function es4u_delete_old_videos(){
  if(!wp_next_scheduled('es4u_delete_video')) {
       wp_schedule_event (time(), 'hourly', 'es4u_delete_video');
    }
}

  • Schau dir das an – wp-cron.

    – Ivnhal

    12. Oktober 2016 um 20:12 Uhr

  • @stweb OK, danke. Sagen Sie, ich folge dem wp_schedule_event()' example, I place my code within es4u_delete_video_func()` in do_this_hourly(). Das behebt das Setup, aber ich weiß, dass mein Code eindeutig falsch ist. Ich bin mir nicht sicher, wie ich die Abfrage delete *… schreiben soll.

    – VCP

    12. Oktober 2016 um 20:19 Uhr

Benutzer-Avatar
Jrod

Anstatt zu verwenden mysqli Funktionen können Sie die eingebaute WordPress-Klasse verwenden wpdb einen Teil der Arbeit für Sie erledigen. WordPress erstellt eine globale $wpdb Objekt, das Sie verwenden können.

function es4u_delete_video_func() {
    global $wpdb;
    $sql="DELETE FROM awdwp_webinar_orders WHERE start_time < DATE_ADD( NOW(), INTERVAL -48 HOUR )";
    $wpdb->query( $sql );

}

  • Ich möchte auch darauf hinweisen, dass die Löschabfrage des VCP “wie in SQL” direkt in PHP geschrieben wird. Da es sich um PHP und nicht um SQL handelt, muss man bestimmte Methoden verwenden, um eine Abfrage zu senden. Methoden wie mysqli oder andere.

    – Jakow L

    12. Oktober 2016 um 20:18 Uhr

  • @jrod Ah, okay, großartig, ich sehe jetzt, wie das geht. Ich habe begrenzte Sachen mit gemacht $wpdb. Vielen Dank. Wenn ich also meine Funktion durch das ersetze, was Sie geschrieben haben, sollte das jedes Mal funktionieren, wenn jemand die Seite besucht? Macht es einen Unterschied, wenn mein start_time Spalte ist ein datetime Typ?

    – VCP

    12. Oktober 2016 um 20:24 Uhr

  • Sie sollten in der Lage sein, Ihre Funktion mit dem zu aktualisieren, was ich bereitgestellt habe, solange Ihre SQL-Abfrage korrekt ist. Sie stellen den Cron-Job so ein, dass er jede Stunde ausgelöst wird, damit er nicht für jeden Besucher ausgelöst wird, aber wenn ein Benutzer die Website eine Stunde oder länger besucht, seit der letzte Cron-Job ausgelöst wurde, wird er erneut ausgelöst.

    – Jrod

    12. Oktober 2016 um 20:30 Uhr

  • @Jrod Hmm, meine Abfrage muss falsch sein, da die Tabellen nicht aktualisiert werden. Ich fühle mich jetzt so nah dran, aber ich vermisse nur etwas Kleines.

    – VCP

    13. Oktober 2016 um 22:08 Uhr

  • Tut mir leid, dass mir das vorher nicht aufgefallen ist, aber deine Frage ist falsch. Sie sollten kein Sternchen zwischen DELETE und FROM verwenden, und Ihre Verwendung von DATE_ADD ist falsch. Ich habe meine Antwort mit der richtigen Abfrage aktualisiert.

    – Jrod

    14. Oktober 2016 um 1:43 Uhr

1225210cookie-checkGeplante WordPress-Aufgabe zum Löschen von Zeilen, die älter als 48 Stunden sind

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy