Как вывести опубликованные в блоге посты с задержкой

👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Я уже рассказывал о методе, который позволяет отправлять опубликованные посты в RSS с определенной задержкой, и даже описывал аналогичные по действию плагины — Feed Delay и Deferred RSS. Для тех же, кто хочет с задержкой выводить опубликованные посты в самом блоге, не только в RSS, но и на всех страницах, может пригодиться нижеследующий код.

Для создания задержки с публикацией постов на главной странице вставьте этот код в файл functions.php используемой вами темы:
<

 extra="4">function publish_later_on_frontend( $where ) {    
	if ( is_admin() || is_preview() || is_feed() )        
	return $where;    
	$offset =  15; // минуты    
	$offset = ( get_option( 'gmt_offset' ) * 3600 ) - ( $offset * 60 ); // вычисление задержки с учетом текущено времени    
	$where .= " AND post_date < '" . gmdate( 'Y-m-d H:i:s', ( time() + $offset ) ) . "'";    
	return $where;
}
add_filter( 'posts_where', 'publish_later_on_frontend' );

Обратите внимание на строку 4 — в ней указывается время задержки в минутах. После публикации пост будет виден среди остальных в административной части блога, но не будет виден на его страницах, доступных посетителям. Для чего это нужно? Ну, например, для того, чтобы дать себе время на проверку граматических ошибок, которые, как всегда, вы обнаруживаете уже после публикации.

Если же вы хотите дать зарегистрированным пользователям преимущество первыми читать публикации, то можно создать задержку только для незарегистрированных, а зарегистрированным показывать посты сразу. Для этого используйте вместо предыдущего кода этот:
<

 extra="4">function publish_later_on_frontend( $where ) {    
	if ( is_admin() || is_preview() || is_feed() || current_user_can('read') )        
	return $where;    
	$offset =  1; // дни    
	$offset = ( get_option( 'gmt_offset' ) * 3600 ) - ( $offset * 24 * 60 * 60 ); // вычисление задержки относительно текущего времени    
	$where .= " AND post_date < '" . gmdate( 'Y-m-d H:i:s', ( time() + $offset ) ) . "'";    
	return $where;
}
add_filter( 'posts_where', 'publish_later_on_frontend' );

В строке 4 указана задержка в 1 день. Зарегистрированные пользователи увидят пост сразу, а незарегистрированные — только на следующий день. В RSS пост попадет тоже только на следующий день.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий