Für Menschen · Seien Sie begeistert und Sie werden begeistern !
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.
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 980 Beiträge, 18722 Kommentare in 14 Kategorien und 464 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
27. Oktober 2008 um 18:13
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!
27. Oktober 2008 um 18:17
@gr4y: aber nicht jeder FeedReader, geschweige denn in Echtzeit.
27. Oktober 2008 um 18:33
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.
27. Oktober 2008 um 19:09
@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
$wherezerlegen.27. Oktober 2008 um 20:00
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".
27. Oktober 2008 um 20:32
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"
27. Oktober 2008 um 21:26
Klasse Idee, Frank! Finde ich sehr nützlich.
27. Oktober 2008 um 21:52
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
28. Oktober 2008 um 06:57
Das mit dem zeitversetzten Ping würde ich auch nutzen.
28. Oktober 2008 um 10:17
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
28. Oktober 2008 um 11:38
hmmm, man kann sich auch kaputtoptimieren... finde ich.
29. Oktober 2008 um 09:58
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“?
29. Oktober 2008 um 11:01
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.
29. Oktober 2008 um 11:25
@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.
29. Oktober 2008 um 13:26
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?
29. Oktober 2008 um 13:54
Ja, finde ich und ich werde nochmal dran schrauben. Aktuell habe ich keine Lösung parat, muss mir mal den Source anschauen.
29. Oktober 2008 um 16:28
@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...
30. Oktober 2008 um 09:40
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.
30. Oktober 2008 um 11:58
31. Oktober 2008 um 12:54
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.
10. November 2008 um 11:56
Warum muss eigentlich alles Fehlerfrei sein - Fehler machen ist meiner Meinung nach menschlich und diese zuzugeben ist kein Drama sondern beweist Größe
10. November 2008 um 13:00
@Antje: mit Sicherheit ein Argument!
10. November 2008 um 13:25
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.
11. November 2008 um 08:13
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.
11. November 2008 um 09:17
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
11. November 2008 um 09:58
@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.
20. September 2010 um 20:56
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 ...
21. September 2010 um 09:21
@Susann: Die URL passt trotzdem, lediglich der Feed bekommt den Inhalt etwas später.