1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Funktion automatisch per wp_schedule_event laufen lassen

Dieses Thema im Forum "Allgemeines" wurde erstellt von Andreas 2012, 15. März 2021.

  1. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    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.

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Hat jemand eine Idee, was an dem Code falsch sein könnte?

    Herzlichen Dank für eure Hilfe im voraus!

    Andreas
     
  2. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    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. ;)
     
    #2 mensmaximus, 15. März 2021
    Zuletzt bearbeitet: 15. März 2021
  3. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    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?
     
  4. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.660
    Zustimmungen:
    1.783
    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...
     
  5. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    Kannst du mir einen Tipp geben, wie ich das genau machen muss?
     
  6. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    Ich habe meine erste Antwort überarbeitet.
     
  7. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    Ah, super, vielen Dank! Ich werde mich mal daran versuchen ;)
     
  8. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    Leider klappt es immer noch nicht. Mein Code sieht jetzt folgendermaßen aus:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Woran könnte es liegen?
     
    #8 Andreas 2012, 15. März 2021
    Zuletzt bearbeitet: 15. März 2021
  9. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    UPDATE:
    define( 'WP_DEBUG', true ); ist eingeschaltet, aber es erscheint keinerlei Fehlermeldung, wenn ich die entsprechende Taxonomie aufrufe. Die Seite bleibt ohne Einträge.
     
  10. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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".
     
  11. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    Die Terms werden nicht zugewiesen, d.h. wenn ich die Seite mit dem Alter 55 aufrufe, bleibt sie leer. Wie kann ich denn erkennen, ob der Cronjob läuft?
     
  12. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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.
     
  13. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    Sorry, das habe ich dann falsch verstanden.
    Das heißt, ich muss das ganze nicht in der functions.php abspeichern sondern als Plugin?
     
  14. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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.
     
  15. Andreas 2012

    Andreas 2012 Well-Known Member

    Registriert seit:
    25. November 2012
    Beiträge:
    71
    Zustimmungen:
    0
    OK, danke, ich versuche es.
     
  16. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    437
    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.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden