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.
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!
@gr4y: aber nicht jeder FeedReader, geschweige denn in Echtzeit.
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.
@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.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".
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"
Klasse Idee, Frank! Finde ich sehr nützlich.
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
Das mit dem zeitversetzten Ping würde ich auch nutzen.
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
hmmm, man kann sich auch kaputtoptimieren... finde ich.
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“?
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.
@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.
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?
Ja, finde ich und ich werde nochmal dran schrauben. Aktuell habe ich keine Lösung parat, muss mir mal den Source anschauen.
@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...
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.
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.
Warum muss eigentlich alles Fehlerfrei sein - Fehler machen ist meiner Meinung nach menschlich und diese zuzugeben ist kein Drama sondern beweist Größe
@Antje: mit Sicherheit ein Argument!
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.
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.
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
@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.
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 ...
@Susann: Die URL passt trotzdem, lediglich der Feed bekommt den Inhalt etwas später.