Сегодня пост по теме “прилепленные записи” – мною будет предложен для кого-то, возможно, полезный код, который автоматически – по заданной дате – открепит ранее прилепленную запись.
Не так давно, поправлял клиенту сайт на базе шаблона ClassiPress (доска объявлений) – ему как раз нужно было сделать так, чтоб VIP объявления (отработка которых, скажем так, выполнена по принципу Sticky Posts) откреплялись каждая по заданному времени.
На сайте клиента этот функционал работал неправильно! (клиент купил шаблон, и однажды обнаружил, что по истечении срока VIP-статус объявления не открепляется)!!
…я всё это дело поправил и теперь решил поделиться кодом, который открепляет запись автоматически – по ранее заданному времени.
…но давайте немного поподробнее…
Sticky Posts WordPress
Коротко по теме:
На обычном сайте на базе WP прикрепить запись (указать статус Sticky) просто! однако как прикрепить, так и открепить запись возможно только вручную (подробнее ниже)!..
В шаблоне же ClassiPress по принципу sticky записей (и произвольных типов) организован вывод VIP блоков. /классипресс – доска объявлений: на этой основе у меня есть
шаблон ats-mod
Шаблон включает в себя модуль регистрации пользователей; защиту… модули оплаты… тонко подстраиваемый функционал из административной панели.
Полностью переведён на русский язык. Требуемые версии: php 5.2. WP 5.3 и т.п./.
итак: достаточно отметить флажком чекбокс “Прилепить на главную страницу” и наша запись будет помечена как sticky т.е. будет прилеплена на главную страницу, либо выведена в каком-то блоке.
В итоге все наши прилепленные записи будут сгруппированы в административной панели в разделе “Все записи”.
Прилепленные записи WordPress – полезная функция, на базе которой можно выполнить множество полезных фишек. Например, как упомянуто чуть выше, – выводить некий блок с важными сообщениями для пользователей.
Всё бы замечательно, однако, управлять прилепленными записями (прилеплять/откреплять) возможно только при редактировании записи: то есть вручную… Так на данный момент устроено в WordPress.
…и вот однажды приходит время, когда ручное управление для админа сайта становится неудобным. Было бы гораздо лучше, логичнее, если бы эти прилепленные записи отключались автоматически – по заданной дате.
К примеру, банальный вариант: обозначить срок публикации возможно, добавив к посту соответственные данные произвольного поля.
Получится примерно так, как видно на скриншоте ниже: дата, достигнув которую (по истечению которой), прилепленная запись потеряет свою липкость (т.е. открепится – активность Sticky будет отменена) – 2020-11-29 10:18:15
Возможно, кому-то будет интересно прочесть:
выводим свои соответствующие теги (метки) для конкретной текущей рубрики (2 варианта) – Получится так: все имеющиеся на сайте теги — всё их общее количество выводиться не будут — а будут отображены только те метки (теги) которые относятся к данной конкретной категории — в любой другой рубрике, будут выводиться только соответствующие ЕЙ метки!..
как перевести сайт на https
во всём существуют нюансы. А в переводе своего сайта на ssl шифрование (https), этих закавык множество!
Вот о них сегодня в подробностях и поговорим:
открепляем прилепленные записи Sticky Posts автоматически – по заданной дате
Для того, чтобы прилепленные записи откреплялись по заданному времени – автоматически, всего-то требуется добавить такой код в файл functions.php активного шаблона…
…или, к примеру, организовать плагин
айл функций — занимательный помощник в расширении функционала сайта ! особливо, если используется по назначению, — однако, многие владельцы блогов/сайтов замечательным образом превращают functions.php в сборную солянку.…
напоминаю: все прилепленные записи, которые требуется открепить автоматом по дате, должны иметь произвольное поле по типу date_unsticks с соответственными данными!
А вот и сам код:
/*открепляем прилепленные записи автоматически - по заданной дате*/
function date_ats_is_expired( $post_id = 0 ) {
$expires = get_post_meta( $post_id, 'date_unsticks', true ); // date_unsticks имя пр. поля даты истечения срока stick = Y-m-d ...и минуты
if( ! empty( $expires ) ) { // проверяем данные переменной
// Получаем текущее время и дату окончания срока действия "липкости" записи
$current_time = current_time( 'timestamp' );
$expiration = strtotime( $expires, current_time( 'timestamp' ) );
// Определяем, превышает ли текущее время срок "липкости" поста
if( $current_time >= $expiration ) {
return true;
}
}
return false;
}
/**
* Unstick Posts
*
* @access public
* @since 2.2
* @return void
*/
add_filter( 'the_title', 'date_ats_unstick', 100, 2 );
function date_ats_unstick( $titless = '', $post_id = 0 ) {
if( date_ats_is_expired( $post_id ) ) {
// если срок "липкости" записи истек - отклеиваем
unstick_post( $post_id );
}
return $titless;
}
/*открепляем прилепленные записи автоматически - по заданной дате*/
работа кода автоматического открепления прилепленных записей Sticky Posts
…код проверяет наличие на сайте так называемые прилепленные записи stick_post
, отслеживает даты окончания (если таковые указаны) и по исходу времени изменяет статус. То есть открепляет запись. а проще говоря – снимает флажок чекбокса “Прилепить запись на главную страницу” или там как-то ещё может быть…
…и что примечательно!! всё это открепление sticky происходит в автоматическом режиме))
В переменной $expiration
– сравним текущее время timestamp
с временем заданного срока sticky – $expires
.
$expiration = strtotime( $expires, current_time( 'timestamp' ) );
Далее банальное математическое php
сравнение: (больше или равно от текущего времени… или меньше или равно и т.д.)
if( $current_time >= $expiration )
В коде используем функцию unstick_post. т.е. UN – деактивация.
…и также в сниппете я дал некоторые комментарии, думаю, этого достаточно!..
Это решение возможно изменить по своим усмотрениям… прикрепить к требуемому функционалу сайта. Например в связках с update_post_meta()
или wp_update_post()
.
…на этом этапе моё повествование можно считать законченным.
Однако, если у вас остались вопросы, задавайте их в комментариях…
Создание… продвижение сайтов: студия ATs media запросто с WordPress
mihalica.ru !
Миха, привет! Прикольный код. Нужно будет скопировать и сохранить. Вдруг пригодится. Так что спасибо за науку.
Привет!!
Прикольная оценка коду “прикольный”.
Что в нем прикольного?? код как код… полезный иногда бывает…
Здравствуйте!
скажите пожадуйста, а где собраны данные о стики постах в БД??
Здравствуйте!
в таблице: wp_options – ID поста.
По сути, можно же на автомате прописать “
date_unsticks
“, чтобы это поле в итоге и не заполнять.К примеру – по истечению 2х дней, можете пример такого решения написать? Я сам не осилю.
Но, то, что вы уже сделали – это прям спасибо!
Отличное решение, когда на автомате все новые посты в прикреплённые уходят.
Хорошего вам дня! Спасибо за код!
Привет, Вячеслав!.. Пожалуйста! …весьма здОрово, что пригодился код..! (пардон, что несразу ответил… занят был)
Можно и, как вы говорите, на автомате прописывать условия, можно и еще что-то комбинировать… все в полной зависимости от требований!
Я постараюсь прямо сюда (в коммент вам) или пост дополню решением – через пару дней. Потестирую на активном сайте…