Sidebar
ein-/ausblenden

WordPress Feed zeitversetzt befüllen

Plugin für WordPress SEO

Anzeige

Der eine oder andere Leser kennt das vielleicht: man veröffentlicht einen neuen Beitrag und noch im Speichern erkennt man einen Fehler. Nun ist es aber schon zu spät, der Fehler ist im Feed und damit in die weite Welt hinaus.

Mir schon mehrfach passiert, die Kommentare mit Hinweis auf den Fehler sind schneller, als ich den Fehler beheben kann. Darum dachte ich mir, eventuell kann man den Feed zeitversetzt mit Inhalt füllen. Schon 5min später, das kann viel ausmachen. Eine Lösung habe ich gefunden und so findet ihr nun einen kleinen Workaround hier.

WordPress arbeitet mit einem speziellen Query, der je nach Nutzerrechten und entsprechender Aktion durch den User, sich unterschiedlich verhält. Er ist aber immer in der Variable $where gespeichert und wird unterschiedlich bestückt. Das heißt, man kann ihn erweitern.

Schaut man sich nun die Möglichkeiten von mySQL an, dann gibt es dort eine Funktion timestampdiff(), die uns einen schönen Vergleich anbietet. Um diese Funktion erweitere ich den Query von WordPress. Aufpassen, dass man vorher den Feed abfragt (is_feed()), sonst geht das auch beim klassischen Veröffentlichen eines Beitrags.

Die folgende kleine Funktion sorgt dann dafür, dass der Beitrag im Feed erst erscheint, wenn die Wartezeit rum ist, in meinem Beispiel 5 Minuten.


/**
 * puplish the content in the feed later
 * $where ist default-var in WordPress (wp-includes/query.php)
 * This function an a SQL-syntax
 */
function pulish_later_on_feed($where) {
	global $wpdb;
	
	if ( is_feed() ) {
		// timestamp in WP-format
		$now = gmdate('Y-m-d H:i:s');
		
		// value for wait; + device
		$wait = '5'; // integer
		
		// http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
		$device = 'MINUTE'; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
		
		// add SQL-sytax to default $where
		$where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
	}
	return $where;
}

add_filter('posts_where', 'pulish_later_on_feed');

Legt man den obigen Syntax nun in die functions.php des Themes, dann wird der Feed ab nun, jeweils um 5 Minuten zeitversetzt befüllt. Die Werte kann man anpassen, ebenso die Einheit, für besondere Härtefälle. Eventuell werde ich es in einer der nächsten Version des Plugins ©Feed aufnehmen.

27 Kommentare zu „WordPress Feed zeitversetzt befüllen“

  1. 1
    Kommentar von gr4y

    Also mir ist es auch schon mehrfach passiert das ich Fehler gemacht habe. Allerdings wird der Feed doch bei der Änderung des Beitrags mit aktualisiert!

  2. 2
    Kommentar von Frank Bültge

    @gr4y: aber nicht jeder FeedReader, geschweige denn in Echtzeit.

  3. 3
    Kommentar von Max

    Interessanter Beitrag, mir stellt sich dabei aber die Frage ob man dafür evtl. auch den Ping zeitversetzt auslösen könnte.
    Wenn man, wie ich, den Feed über Feedburner bereitstellt und den Beitrag veröffentlicht, wird dabei ja unter anderem auch Feedburner benachrichtigt und holt sich im gleichen Moment den aktuellen Feed.
    Mit o.g. Workaround wäre dieser Feed aber noch nicht 'neu' und Feedburner käme dann erst in 30 Minuten wieder vorbei, so wie ich es verstanden habe.

  4. 4
    Kommentar von Frank Bültge

    @Max: kommt darauf an, wie du Feedburner informierst. Hängt er auch nur am Feed, dann bekommt er es ja auch zeitverzögert.
    Mit dem Ping ist es nicht so einfach, weil man den quasi nicht per Conditional Tag abfragen kann, gehen könnte es aber auch. Müsste man noch mal die $where zerlegen.

  5. 5
    Kommentar von Markus

    Das ist mal wieder ein klasse Tipp von Dir, kann ich auch gut gebrauchen. Jetzt muss ich nur noch mal nachsehen, wie ich FeedBurner benachrichtige. Ggf. deaktiviere ich den Ping an den "Brenner".

  6. 6
    Kommentar von Alex

    Würde man den Fehler nicht auch erkennen, wenn man vor dem Klick auf den "Veröffentlichen Button" eine Vorschau bekommt bei der ein Ticker x Sekunden runterzählt. Eine Art "3,2,1 published" :-)

  7. 7
    Kommentar von Dirk Schürjohann

    Klasse Idee, Frank! Finde ich sehr nützlich.

  8. 8
    Kommentar von Wishu

    Das mit dem Ping würde mich auch interessieren, da ich mal einen Beitrag übert APNG geschrieben habe und ausversehen in dem Titel APGN zu stehen hatte. Google hatte das natürlich gleich gemerkt. Ok ich habe auch einige Besucher darüber bekommen aber unschön war es trotzdem

  9. 9
    Kommentar von Hollii

    Das mit dem zeitversetzten Ping würde ich auch nutzen. :)

  10. 10
    Kommentar von FuNKeR

    Sehr interessant. Werde ich bei mir mal einbauen. Merke auch ab und zu, dass ich noch was vergessen habe bzw. Fehler eingebaut habe. Meist allerdings struktureller Natur ;)

  11. 11
    Kommentar von Papa Bodehase

    hmmm, man kann sich auch kaputtoptimieren... finde ich.

  12. 12
    Kommentar von datenkind

    Klasse Tipp, Frank. Ging mir schon öfter. Da ist man im Wahn und hackt auf die Tastatur, um dann später die Fehler wieder aufgetischt zu bekommen, arrgh!

    Papa Bodehase: Wo ist das denn bitte kaputtoptimieren? Nur weil’s kein optisches Gimmick in der Backend-GUI ist? Wär’s dann ein extravagantes Feature? Warum ist eine gewisse Optimierung für die Qualität eines Beitrags „kaputtomptimieren“?

  13. 13
    Kommentar von Papa Bodehase

    Kaputtoptimiert deshalb, weil ich die Idee zwar gut finde (da ich auch oft erst nach dem Veröffentlichen irgendwelche Fehler finde), aber ohne eine gleichzeitige Pingverzögerung das nicht gerade hilfreich ist, weil dann die Ping-Services die alte RSS-Datei abholen.

    Wie Du darauf kommst, daß es ein GUI-Feature sein muss, ist mir ein Rätsel.

    Als Plugin fände ich sowas gut (egal welches Blogsystem). Als Code-Veränderung eher suboptimal, da beim nächsten Update (was bei WP mehr als oft vorkommt) eh wieder alles weg wäre.

  14. 14
    Kommentar von Frank Bültge

    @Papa Bodehase: warum sollte es beim nächsten Update weg sein? Es ist eine Erweiterung im Theme, man kann es genauso als Plugin ablegen. IN beiden Varianten wird es beim Update beibehalten.

  15. 15
    Kommentar von Papa Bodehase

    Okay, das ist dann okay. Aber findest Du nicht, daß ein alter Feed, der erst in 5 Minuten geändert wird, und ein Ping, der die Services auf was Neues aufmerksam macht, nicht so ganz zusammenpassen?

  16. 16
    Kommentar von Frank Bültge

    Ja, finde ich und ich werde nochmal dran schrauben. Aktuell habe ich keine Lösung parat, muss mir mal den Source anschauen.

  17. 17
    Kommentar von Markus

    @Papa Bodehase: Es geht doch un den Ping an FeedBurner. Ich muss den Ping ja nicht senden, dann bekommt der Service eben erst später von einem neuen Artikel mit. Das ist mir persönlich egal...

  18. 18
    Kommentar von Sergej Müller

    Schöne Lösung.

    In der Regel mache ich es bei einem nach der Veröffentlichung entdeckten Fehler so, dass ich einfach im FeedBurner auch Synchronisieren drücke, damit der Feed an der Stelle aktualisiert wird. Klappt eigentlich.

  19. 19
    Pingback von Wordpress Plugin: RSS Feed zeitversetzt mit Inhalten füllen » Feed, WordPress, Artikel, September, Frank, Kommentaren, Lösung, Keith » missfitsbiz
  20. 20
    Kommentar von marco

    1.000 Dank für den Code, das ist gerade für Blogs mit mehreren Autoren und verschiedenem Wissenstand eine sehr gute Methode, einen Zeitpuffer für Katastrophen vorzusehen, wenn z.B. mal ein post-slug mit einer Zahl beginnt.

  21. 21
    Kommentar von Antje

    Warum muss eigentlich alles Fehlerfrei sein - Fehler machen ist meiner Meinung nach menschlich und diese zuzugeben ist kein Drama sondern beweist Größe :)

  22. 22
    Kommentar von Frank Bültge

    @Antje: mit Sicherheit ein Argument!

  23. 23
    Kommentar von Wishu

    Naja aber Konkret in meinem Fall mit APGN statt APNG war es dann doch schon stark von Nachteil. Also ich finde die Idee an sich schon gut.

  24. 24
    Kommentar von Frank Bültge

    bzgl. Ping: habe mir nochmal die Funktionen dazu angeschaut; ich meine, dass man eigentlich nur den Standard deaktivieren kann und dann die Funktionen mit eigenen zeitverschobenen Funktionen ersetzt.

    remove_action('do_pings', 'do_all_pings');
    remove_action("publish_post", "generic_ping");
    

    Das Deaktivieren könnte man damit wohl lösen und dann müsste man diese Fkt.en ersetzen.
    Ich halte das aber für ein wenig kritisch. Die Ping-Fkt.en sind nicht ohne. Ob der Aufwand gerechtfertigt ist - ich meine nein. Wenn ich den Feed um 5min später befülle, dann fallen schon die meisten Nutzer weg. Die wenigen Pings, die wirklich in Echtzeit reinkommen, kann man getrost ignorieren. Ebenso kommt ja noch die zeit drauf, die der Nutzer benötigt, um den Ping zu verfolgen.
    Die Funktion soll auch nicht dafür sein, dass man Artikel umschreibt, sondern lediglich mal diverse Orthographie-Fehler o.a. Kleinigkeiten behebt.

  25. 25
    Kommentar von Wishu

    Ebenso kommt ja noch die zeit drauf, die der Nutzer benötigt, um den Ping zu verfolgen.

    Und die ist bei Google leider fast 0. Darum geht es mir hauptsächlich. Sobald ein Beitrag veröffentlicht wird, hat Google den bei mir eigentlich schon indexiert. Aber wenn es zu viel Aufwand wäre, muss ich halt besser aufpassen, bis die WP-Entwickler evtl. mal selbst drauf kommen es einzubauen ;)

    Trotzdem danke!

    Gruß
    Wishu

  26. 26
    Kommentar von Frank Bültge

    @Wishu: die WP-Entwickler werden das sicher nie ändern. Die Veröffentlichung sollte im Standard schon synchron laufen. Aber selbst wenn Google diesen Artikel indiziert, dann wird Google mit dem kleinen Fehler leben können. Die Kontrolle vor der Veröffentlichung sollte nur durch diese Funktion nicht "schlampiger" sein.

  27. 27
    Kommentar von Susann

    Wenn man den den geschriebenen Artikel ansieht, passt oft mit der URL was nicht. Entweder weil ich nicht aufgepasst hab, oder weil WP da was ändert. Müsst´ man da nicht noch Ping und Sitemap usw zeitversetzt ausgeben? Geschickter wäre es wenn die Vorschaufunktion schon die richtige URL ausgeben würde;-) Vor allem wenn man zeitversetzt schreibt ...

  28. 28
    Kommentar von Frank Bültge

    @Susann: Die URL passt trotzdem, lediglich der Feed bekommt den Inhalt etwas später.

Kommentare sind geschlossen.