Löschen Sie alle geplanten Ereignisse mit einem bestimmten Hook

8

Ich habe mehrere Cron-Jobs, die alle an denselben Hook gebunden sind, aber jeweils ein anderes Argument haben (eine Post-ID). Es wird wp_clear_scheduled_hooknur der Job gelöscht, der mit dem übergebenen Argument übereinstimmt (oder Jobs ohne Argumente, wenn kein Argument angegeben ist).

Gibt es eine Möglichkeit, alle mit einem Hook verknüpften Cron-Jobs zu löschen, unabhängig von dem Argument, das dieser Job hat? (Ohne dies manuell durch Durchlaufen der IDs zu tun).


Scheint, eine Antwort wurde gelöscht! Um zu verdeutlichen, was ich erreichen möchte: Jeder Beitrag hat ein Ablaufdatum - und ich möchte den Beitrag nach diesem Datum löschen.

(Eine alternative Option besteht darin, einen Cron-Job zu haben, der alle 24 Stunden wiederholt wird und abgelaufene Beiträge löscht.)

Ich habe mich jedoch entschlossen, für jeden Beitrag einen einmaligen Job zu erstellen. Es scheint jedoch, dass Sie nicht alle Jobs gleichzeitig löschen können, ohne sie zu durchlaufen.

Stephen Harris
quelle

Antworten:

10

Ich habe gerade schnell die folgende Funktion geschrieben, sie löscht alle Cron für den angegebenen Hook, unabhängig von der Cron-Zeit und dem Hook-Argument.

HINWEIS: Ich habe die Funktion NICHT GETESTET. Führen Sie sie daher nicht auf Ihrer Live-Site aus.

function wpse39681_clear_all_crons( $hook ) {
    $crons = _get_cron_array();
    if ( empty( $crons ) ) {
        return;
    }
    foreach( $crons as $timestamp => $cron ) {
        if ( ! empty( $cron[$hook] ) )  {
            unset( $crons[$timestamp][$hook] );
        }

        if ( empty( $crons[$timestamp] ) ) {
            unset( $crons[$timestamp] );
        }
    }
    _set_cron_array( $crons );
}

Siehe auch: http://core.trac.wordpress.org/ticket/18997

Hameedullah Khan
quelle
Danke Hameedullah. Ich habe mich für die alternative Option entschieden, da WordPress auf diese Weise alte weggeworfene Beiträge löscht. Ich habe Ihre Funktion nicht getestet, aber sie sieht richtig aus und würde den Job machen. Danke noch einmal.
Stephen Harris