WordPress Feed zeitversetzt befüllen

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 wiete 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.

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.

Kommentare sind geschlossen.