WordPress Content zeitversetzt darstellen

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 12 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

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.

Von Frank Bültge

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.