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

Mail Benachrichtigung bei neuem Update

Dieses Thema im Forum "Plugin-Vorstellung" wurde erstellt von squizeer, 24. April 2008.

  1. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Mit der Version 2.3 ist ja eine Funktion in WordPress integriert worden, welche anzeigt, ob für WordPress oder ein Plugin eine aktuellere Version vorliegt (sofern das Plugin im WordPress Verzeichnis ist). Damit man nicht immer in die Liste der Plugins schauen muss, gibt es das Global Plugin Update Notice, dass eine entsprechende Benachrichtigung auf jeder WordPress-Admin-Seite anzeigt. Allerdings muss auch dafür seine WordPress Installation aufrufen, um von einer Aktualisierung zu erfahren. Deshalb kam mir heute die Idee, ein Plugin zu schreiben, welches in regelmäßigen Abständen per WP-Cron prüft, ob eine neue Plugin-Version vorliegt und den Benutzer per E-Mail benachrichtigt. Das Plugin war schnell geschrieben, allerdings gab es bei der Ausführung ein recht großes Problem. Die Funktion, welche die Plugins auf neue Versionen prüft (wp_update_plugins), ist nur im Kontext des Admin-Bereiches verfügbar, und kann dementsprechend per WP-Cron nicht ausgeführt werden.

    Das Plugin ist soweit fertig, scheitert aber an dieser besagten Funktion. Vielleicht hat ja jemand diesbezüglich noch einen heißen Tipp, denn ich glaube, gerade wenn man mehrere Blogs betreibt, in denen man nicht regelmäßig schreibt, könnte diese Möglichkeit der Benachrichtigung von Vorteil sein.
     
  2. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
  3. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Den Cron rufe ich wie folgt auf

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Das Problem ist, dass im Kontext des Cron, die Funktion wp_update_plugins() nicht zur Verfügung steht. Sie liegt in der Datei wp-admin/includes/update.php und ist anscheinend nur im Admin-Bereich verfügbar.
     
  4. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
    Was macht deine Funktion checkPluginUpdates, die du über
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    aufrufst? Ruft diese einfach die Funktion wp_update_plugins() auf?
     
  5. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Ja. Erst wird wp_update_plugins() aufgerufen, dann nachgesehen welche Plugins aktualisiert worden sind.
     
  6. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
    Hmm, dann würde ich die Funktion grundlegend nachbauen, und das ganze Filesystem-Gedöns weglassen, da du das ja nicht brauchst. Dann kannst du deine eigene Funktion per WP-Cron auch außerhalb des Admin-Scopes aufrufen, und die Mail(s) verschickekn...
     
  7. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Hab ich auch schon überlegt. Die Frage ist nur, ob die Funktion auf andere Funktionen zurück greift, die ebenfalls nur im Admin-Scope verfügbar sind.
     
  8. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
    Das sollte dann IMO egal sein. Sobald deine eigene "externe und freie" Funktion steht, hast du darüber Zugriff auf alle WP-Funktionen, die es gibt. Einziges Problem wird sein, ob du dich dann über Filter und Hooks in diese Funktionen einklinken kannst, um an die entsprechenden Daten zu kommen, die an diese Funktionen übergeben werden..
     
  9. redcat63

    redcat63 Well-Known Member

    Registriert seit:
    31. März 2006
    Beiträge:
    1.036
    Zustimmungen:
    0
    Hast Du schon mal versucht die Datei wp-admin/includes/update.php per include oder require in Dein Plugin zu integrieren?

    VG Elke
     
  10. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Ja, hab ich. Das funktioniert auch, nur erscheint mir das nicht ganz sauber.

    Ich habe gerade die Update-Funktion aus der update.php 1:1 ins Plugin kopiert. Für den redundanten Code gibt es zwar 3 Jahre Programmier-Hölle, aber es funktioniert :D

    Ich frage mich nur grade, ob es eine Zugriffsbeschränkung auf die WordPress API gibt. Nicht das man mit aktiviertem Plugin auf einer Blacklist landet, wenn man stündlich auf Aktualisierungen prüft.
     
  11. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
    Ach, die Jungs vom CakePHP-Projekt scheinen auch fleißig Teile von Ruby on Rails zu übernehmen, und leben auch noch auf der Erde. :mrgreen: ;)

    Und ich denke nicht, dass es derzeit Beschränkungen gibt. Aber da könntest du entweder mal nachfrragen, oder warten bis die API dokumentiert ist..

    edit. Ich würde höchstens den 'User-Agent', den dein Plugin dann an api.wordpress.org sendet, abändern, damit man sieht, dass der Zugriff von deinem Plugin kommt.

    Kann man das Plugin irgendwoher bekommen? :)
     
    #11 Alphawolf, 24. April 2008
    Zuletzt bearbeitet: 24. April 2008
  12. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Kann man :D Teste aber gerade noch ein bisschen. Habe es schon im Plugin Verzeichnis angemeldet und warte noch auf Freigabe.
     
  13. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
    Ah, okay. Wenn du noch einen Tester suchst, meld dich (aber nur wenn ich das Rezensionsexemplar behalten darf. :)).
     
  14. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Irgendwie will der Cron nicht laufen. Beim ersten Start macht er einmal was, aber danach kommt nichts mehr. Hatte für Testzwecke einfach mal an den Anfang von checkPluginUpdates() einen E-Mail-Versand gesetzt und darberhinaus div. Plugins auf niedrigere Versionen runter gestellt.

    Zwei Anmerkungen:
    - Die Update-Plugins Funktion ist noch nicht anonymisiert
    - Die Empfänger E-Mail-Adresse wird über die Konstante RECIPIENT am Anfang gesetzt.
    Hier mal der komplette Code. Vielleicht hat jemand noch eine Idee :confused:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
    #14 squizeer, 25. April 2008
    Zuletzt bearbeitet: 25. April 2008
  15. redcat63

    redcat63 Well-Known Member

    Registriert seit:
    31. März 2006
    Beiträge:
    1.036
    Zustimmungen:
    0
    Wenn ich Dein Script richtig verstehe, dann prüfst Du, ob und wenn ja wann das letzte Mal ein update-Check vorgenommen wurde.
    Da es beim ersten Mal funktioniert hat:
    Kann es sein, dass Du diese Zeit nicht hast verstreichen lassen bzw. vergessen hast, das erstellte File zu löschen bzw. zu manipulieren?
    Vielleicht liegt es auch daran, dass eine Variable nicht richtig entleert wurde und deswegen beim 2. Mal Schwierigkeiten macht.
    Um das herauszufinden, ob es daran scheitert, übergebe allen Variablen einen leeren String. (Beispiel: $meinevariable='';)

    Auch wenn das Problem eigentlich gelöst ist:
    Warum empfindest Du es als unsauber, wenn Du die Datei per require_once einbindest?
    Es hätte nicht nur den Vorteil, dass Du keinen redundanten Code hast, sondern auch künftige Änderungen, die in der Datei update.php von WP vorgenommen wurden, nicht selbst vornehmen musst (Faulheit siegt, gel? ;))

    VG Elke
     
  16. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    An Zeit habe ich fast 24 Stunden verstreichen lassen, von daher sollte zumindest einmal die checkUpdatePlugins vom Cron aufgerufen worden sein. :D

    Ich hatte ja direkt an die erste Zeile der Funktion eine zusätzliche Mail-Benachrichtigung eingebaut. D.h., unabhängig von der ganzen Prüfroutine der Updates hätte ich bei stündlicher Cron Ausführung zumindest ein paar E-Mails bekommen müssen. Ich sage jetzt einfach mal, dass mein Blog so frequentiert ist, dass die Crons ungefähr stündlich aufgerufen werden :mrgreen:

    Das mit dem "unsauber" meinte ich in Bezug auf Admin-Code außerhalb des Admin-Scope. Vielleicht haben sich die WP-Entwickler was dabei gedacht, weiß ich nur nicht :)
     
  17. Alphawolf

    Alphawolf Well-Known Member
    Ehrenmitglied

    Registriert seit:
    31. Mai 2005
    Beiträge:
    3.315
    Zustimmungen:
    0
    squizeer, schau dir mal das Il Filosofo » WordPress Database Backup Plugin an... das nutzt auch die WP-Cron Klasse und sendet mir zuverlässig die Backups, auch wenn ich nicht im wp-admin bin. :)

    Btw, statt
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    wäre
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    besser, dann muss man das nicht manuell eintragen, sondern das Script nimmt die angegebene Emailadresse des Admins. :)
     
  18. redcat63

    redcat63 Well-Known Member

    Registriert seit:
    31. März 2006
    Beiträge:
    1.036
    Zustimmungen:
    0
    Die Fragen, die sich mir zunächst stellen sind:
    1. Wurde überhaupt ein Cron-Job erstellt, der stündlich durchgeführt wird?
    2. Gibt es die Funktion scheduledCheckUpdates überhaupt oder heißt sie vielleicht scheduleCheckUpdates (o.ä.).

    Vielleicht ist es nicht relevant, aber...
    die class heißt MailOnUpdate. Die Funktion darunter hat den selben Namen. Allerdings werden bei ihr keine Großbuchstaben verwendet. Ist das so gewollt?

    VG Elke

    P.S. Was heißt eigentlich Admin-Scope?
     
  19. squizeer

    squizeer Active Member

    Registriert seit:
    4. September 2006
    Beiträge:
    30
    Zustimmungen:
    0
    Ja, hab ich in der Datenbank überprüft.

    Das könnte ich in der tat nochmal genauer überpfüen :mrgreen:

    Ja, in PHP 4 ist eine Methode mit dem gleichen Namen wie die Klasse der Konstruktoren. In PHP 5 verwendet man __construct().

    Alles, was im Admin-Bereich angesiedelt ist ... würde ich mal so sagen :D

    @Alphawolf
    Die Konstante ist erstmal nur zum testen drin. In der finalen Version hatte ich vor, alle Admins auflisten zu lassen und dann den Nutzer auswählen zu lassen an wenn die Benachrichtigung versendet wird.
     
  20. redcat63

    redcat63 Well-Known Member

    Registriert seit:
    31. März 2006
    Beiträge:
    1.036
    Zustimmungen:
    0
    Wahrscheinlich kennst Du die Seite schon auswendig, aber schau Dir mal das Beispiel genau an.
    Dort findest Du u.a. die Funktion
    register_activation_hook(__FILE__, 'my_activation');

    Außerdem würde ich es statt
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    mal mit:
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    VG Elke
     
    #20 redcat63, 26. April 2008
    Zuletzt bearbeitet: 26. April 2008
  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