Funktion automatisch per wp_schedule_event laufen lassen

  • Hallo Wordpress-Freunde,

    ich habe eine Funktion zur Altersberechnung, welche beim Abspeichern eines Custom Post Type automatisch einen Term einer Custom Taxonomy zuordnet. Das funktioniert auch soweit gut. Nun möchte ich aber nachträglich ca. 10.000 bereits existierenden Posts mit wp_schedule_event den Term automatisch zuordnen lassen.

    Das folgende Skript, das ich mir für diese Automation zusammengebastelt habe, funktioniert aber leider nicht. Zur Demonstration des Codes habe die eigentliche Funktion, die ich automatisieren möchte, erst mal weggelassen. Es geht wie gesagt erst mal darum, das Abspeichern bzw. Zuordnen der Terms zu automatisieren.

    Hat jemand eine Idee, was an dem Code falsch sein könnte?

    Herzlichen Dank für eure Hilfe im voraus!

    Andreas

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hat jemand eine Idee, was an dem Code falsch sein könnte?

    Ganz, ganz viel :D

    Die Foreach Schleife ist falsch. $posts enthält Objekte und keine IDs. Und warum willst Du das nur für 30 Einträge machen?

    Warum weist Du den Tax-Term zweimal zu? Entweder wp_set_post_terms() oder wp_set_object_terms(). Verwende wp_set_post_terms(), da es ein Wrapper für wp_set_object_terms() mit zusätzlichen Prüfroutinen ist.

    Ist die Taxonomy 'alter' hierarchisch? Dann muss die ID des Terms in wp_set_post_terms() verwendet werden.

    Bitte gewöhne Dir an den Rückgabewert einer Funktion zu prüfen. Also

    PHP
    $posts = get_posts( array( 'post_type' => 'person' ) );
    $term_id = 55;
    $taxonomy = "alter";
    foreach( $posts as $post ){
     $set_terms = wp_set_post_terms( $post->ID, $term_id, $taxonomy, false);
     if( false === $set_terms || is_wp_error( $set_terms ) ) {
      // fehlerauswertung
     }
    }

    Und den Cronjob installierst Du in register_activation_hook(). Wenn das Ganze nur einmal zum nachträglichen Zuweisen des Terms laufen soll, macht man das mit wp_schedule_single_event()

    ps: Bei der Programmierung schaltet man immer den Debug Modus von WordPress ein, damit man die gröbsten Fehler schon mal entfernen kann, bevor man Hilfe im Forum sucht. ;)

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

    4 Mal editiert, zuletzt von mensmaximus (15. März 2021 um 10:12)

  • Hallo mensmaximus,
    danke für deine wie immer superschnelle Antwort!

    30 Einträge hatte ich erst mal eingetragen, um zu sehen, ob das ganze überhaupt funktioniert.
    Die taxonomy ist nicht hierarchisch. Und ich hatte mal irgendwo gelesen, dass man wp_set_object_terms zusätzlich nehmen muss, wenn man den Term zuweisen will. Aber dann ist das ja um so besser, wenn es so reicht.

    Ist denn der Rest mit der cronjob-Funktion soweit in Ordnung? Also bei Abspeichern der functions.php müsste das dann automatisch anlaufen?

  • Neben den genannten Fehlern, wp_schedule_event() ruft man nur einmal auf, z.B. bei der Aktivierung eines Plugins im entspr. Activation Hook, nicht bei jedem Aufruf von WordPress in der 'wp' Action...

  • Kannst du mir einen Tipp geben, wie ich das genau machen muss?

    Ich habe meine erste Antwort überarbeitet.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Leider klappt es immer noch nicht. Mein Code sieht jetzt folgendermaßen aus:

    Woran könnte es liegen?

    Einmal editiert, zuletzt von Andreas 2012 (15. März 2021 um 12:01)

  • UPDATE:
    define( 'WP_DEBUG', true ); ist eingeschaltet, aber es erscheint keinerlei Fehlermeldung, wenn ich die entsprechende Taxonomie aufrufe. Die Seite bleibt ohne Einträge.

  • Was funktioniert nicht? Bitte immer konkrete Angaben. Also z.B. "der Cronjob wird nicht angelegt" oder "der Cronjob läuft aber die Terms werden nicht zugewiesen".

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Wie kann ich denn erkennen, ob der Cronjob läuft?

    manno. wirklich? Basiswissen für Entwickler. https://wordpress.org/plugins/wp-crontrol/

    Ich habe da schon einen Verdacht, weil Du weiter oben die functions.php erwähnt hast. In einem anderen Deiner Threads haben @b3317133 und ich Dich mehrfach auf die Doku zu register_activation_hook() hingewiesen. Der funktioniert nicht in der functions.php. Ausserdem würde Dein Schedule die Funktion immer wieder aufrufen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Erstelle ein Plugin. Du willst / musst ja noch mehr Dinge für Deine Anwendung erledigen, wie z.B. den künftigen Cronjob für die Geburtstage.

    OT:
    Ich hoffe hier lesen ganz viele Leute mit, damit endlich mal verstanden wird, warum selbst eine so simple Anforderung mal schnell einen Tag Arbeit verursacht, die im realen Leben entsprechend bezahlt werden muss.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Und in das Plugin kommt dann auch die Anlage des post_type, der taxonomy inklusive terms, sowie die Funktionen zur Berechnung des Alters usw. Also alles was diese Anwendung betrifft.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!