WordPress Content zeitversetzt darstellen

Das zeitversetzte Befüllen von Inhalten mit WordPress ist immer wieder Thema, eine kleine und einfache Lösung möchte ich hier aufzeigen.

Das Befüllen des Feeds um eine gewissen Verzögerung habe ich bereits vor langer Zeit erläutert, wobei im Grunde nur das SQL-Statement erweitert wird und um einen gewissen Zeitraum kann dann später im Feed publiziert werden und so bleibt Raum zu korrigieren.
Natürlich kann man diese Form der Spielereien beliebig betreiben und auch das Frontend später befüllen. Damit wird der Inhalt dem Leser erst nach einer gewissen Zeitspanne dargestellt. Ein kleines Scriptbeispiel soll zeigen, wie das geht.

Die Funktion kann beliebig erweitert werden, so zum Beispiel mit Abfragen zu Rechten der geloggten User abfragen oder vielfältige andere Anforderungen.

Im ersten Snippet wird die Ausgabe auf dem Frontend immer gefiltert, nur im Backend is_admin() und im Feed is_feed() bleibt alles unangetastet. Der Filter ist im Beispiel auf 15 Minuten gesetzt und diese Werden mit der Einstellung von WordPress abgeglichen, damit die Zeitzone beachtet wird. Die 15 Minuten werden in Sekunden umgerechnet und vom Wert abgezogen.


function publish_later_on_frontend( $where ) {
	
	if ( is_admin() || is_preview() || is_feed() )
		return $where;
	
	$offset =  15; // minutes
	$offset = ( get_option( 'gmt_offset' ) * 3600 ) - ( $offset * 60 ); // gmt offset of WP options minus custom time
	$where .= " AND post_date < '" . gmdate( 'Y-m-d H:i:s', ( time() + $offset ) ) . "'";
	
	return $where;
}
add_filter( 'posts_where', 'publish_later_on_frontend' );

Ein weiteres kurzes Beispiel erlaubt es allen geloggten Usern, die minimal die Rechte zum Lesen current_user_can('read') haben - also Abonnenten, die Inhalte zu lesen. Alle anderen Besucher bekommen die Inhalte 10 Tage später dargestellt.


function publish_later_on_frontend( $where ) {
	
	if ( is_admin() || is_preview() || is_feed() || current_user_can('read') )
		return $where;
	
	$offset =  10; // days
	$offset = ( get_option( 'gmt_offset' ) * 3600 ) - ( $offset * 24 * 60 * 60 ); // gmt offset of WP options minus custom time
	$where .= " AND post_date < '" . gmdate( 'Y-m-d H:i:s', ( time() + $offset ) ) . "'";
	
	return $where;
}
add_filter( 'posts_where', 'publish_later_on_frontend' );

Na - andere Ideen mit der Konstellation? Dann gern in die Kommentare oder via Link hierher verweisen. Ebenso freue ich mich, wenn es Verbesserungen am Code gibt; gerade im Bereich Rechnen mit Zeit gibt es ja viel Spielraum.

Kommentare sind geschlossen.