Содержание
- 1 Контент виден только для зарегистрированных пользователей
- 2 Видимость контента в зависимости от роли пользователя на сайте
- 3 Видимость контента в диапазоне дат каждого месяца
- 4 Видимость контента в определенное число месяца
- 5 Видимость контента в определенный день недели
- 6 Видимость контента только в определенный месяц в году
- 7 Видимость контента в диапазоне месяцев
- 8 Видимость контента после наступления даты
- 9 Если не работают шорткоды в шорткоде
Иногда бывает полезным скрыть и/или показать часть контента в записях/страницах WordPress в зависимости от тех или иных условий. Условия и ситуации бывают разными. Допустим, вы проводите конкурс на своем сайте и условия конкурса или его результаты должны автоматически появится на сайте 17 числа текущего месяца. Или вы распространяете ссылки на своем сайте, но не хотите, чтобы их видели все, а только зарегистрированные пользователи сайта. Или вы принимаете анкеты на сайте от аудитории, но хотите показывать анкету на сайте только с 1 по 10 число каждого месяца... И т.д.
Плагинов, управляющих контентом WordPress, разумеется, есть великое множество. Удовлетворяют ли они все востребованные ситуации - не ясно. Но и сделать такое самому (без использования плагинов) не так и сложно. Мы будем использовать шорткоды - это простой набор функций для создания и использования макро-кодов в содержимом записей/страниц. Мы накодируем некоторые типичные ситуации, отталкиваясь от них, вы сможете создать и свою особенную функцию.
Для каждой ситуации нам потребуется функция шорткода, она обычно вставляется в файл functions.php текущей темы и пример непосредственного использования в теле записи/страницы.
Контент виден только для зарегистрированных пользователей
Часть контента на странице можно скрыть от не зарегистрированных пользователей (естественно, его не увидят и роботы поисковых систем). Обычно скрывают: ссылки для скачивания файла, ответ на какой-то вопрос, оставшуюся часть контента (с целью мотивации пользователей регистрироваться и т.д.).
function logged_in_user_content($atts, $content = null) { if (is_user_logged_in() && !is_null($content) && !is_feed()) { return $content; } return 'Доступно только для зарегистрированных пользователей'; } add_shortcode( 'vizible', 'logged_in_user_content');
Использование в теле записи/страницы:
[vizible] Этот текст увидят только зарегистрированные пользователи. Он также будет исключен из поиска. [/vizible]
Видимость контента в зависимости от роли пользователя на сайте
У зарегистрированных пользователей бывают и различные роли (можно здесь почитать). Вы можете оперировать контентом на своем сайте, если используете градации доступа юзеров на своем сайте:
function content_by_user($attr, $content = null) { $defaults = array( 'capability' => '' ); extract(shortcode_atts($defaults, $attr)); if (current_user_can($capability) && !is_null($content) && !is_feed() ) { return $content; } return 'У Вас не хватает прав'; } add_shortcode('rolecontent', content_by_user');
Использование в теле записи/страницы:
[rolecontent capability="edit_posts"] Эта часть контента видна пользователям, c соответствующими правами на сайте. [/rolecontent]
Можно использовать следующие параметры:
- read - контент будет виден всем
- edit_posts - виден редакторам
- manage_options - только администраторам
Видимость контента в диапазоне дат каждого месяца
Если вы хотите сделать видимым часть контента в определенном диапазоне дат каждого месяца (скажем, с 1 по 10 число), можно использовать такой шорткод:
function content_countdown($atts, $content = null){ extract(shortcode_atts(array( 'ot' => '', 'do' => '' ), $atts)); $dt=date("j"); if ($dt>=$ot && $dt<=$do) { return $content; } } add_shortcode('data', 'content_countdown');
Использование в теле записи/страницы:
[data ot="1" do="10"] Показываем пользователям то, что будет доступно лишь с 1 по 10 число (включительно) каждого месяца. [/data]
Видимость контента в определенное число месяца
Бывает полезным, например, если 30 числа каждого месяца вы подводите какие-то итоги. Делается как и аналогично в прошлом случае, с некоторыми модификациями:
function content_countdown_data($atts, $content = null){ extract(shortcode_atts(array( 'chislo' => '' ), $atts)); $dt=date("j"); if ($dt==$chislo) { return $content; } } add_shortcode('datas', 'content_countdown_data');
Использование в теле записи/страницы:
[datas chislo="30"] Этот контент будет доступным пользователям лишь 30 числа каждого месяца. [/datas]
Видимость контента в определенный день недели
Контент можно прятать/показывать и в определенный день недели (понедельник, вторник и т.д.)
function content_countdown_w($atts, $content = null){ extract(shortcode_atts(array( 'chislo' => '' ), $atts)); $dt=date("w"); if ($dt==$chislo) { return $content; } } add_shortcode('week', 'content_countdown_w');
Использование в теле записи/страницы:
[week chislo="0"] Этот контент будет доступен лишь в определенный день недели. Достаточно указать в параметре порядковый номер дня недели: от 0 (воскресенье) до 6 (суббота) [/week]
Видимость контента только в определенный месяц в году
Чтобы выводить контент на своем сайте в отдельном месяце года (не уверен, что кому-то надо, но все же), используем такой шорткод:
function content_countdown_month($atts, $content = null){ extract(shortcode_atts(array( 'month' => '' ), $atts)); $dt=date("n"); if ($dt==$month) { return $content; } } add_shortcode('month', 'content_countdown_month');
Использование в теле записи/страницы:
[month month="1"] Этот контент будет доступным пользователям лишь в январе месяце. Число указывать: от 1 до 12. [/month]
Видимость контента в диапазоне месяцев
А вдруг вам понадобится показывать/прятать контент лишь летом или зимой? Или в первый квартал года? Можем сделать таким шорткод:
function content_countdown_months($atts, $content = null){ extract(shortcode_atts(array( 'ot' => '', 'do' => '' ), $atts)); $dt=date("n"); if ($dt>=$ot && $dt<=$do) { return $content; } } add_shortcode('months', 'content_countdown_months');
Использование в теле записи/страницы:
[months ot="1" do="3"] Контент будет доступен лишь в первом квартале года, с 1 по 3 месяц (включительно). [/months]
Видимость контента после наступления даты
Вы можете спрятать содержимое, которое посетители вашего сайта увидят только после наступления необходимой даты. Такой код будет востребован для информера о наступлении Нового года, об окончания конкурса, марафона на сайте и т.д.
function content_countdown_day($atts, $content = null){ extract(shortcode_atts(array( 'month' => '', 'day' => '', 'year' => '' ), $atts)); $remain = ceil((mktime( 0,0,0,(int)$month,(int)$day,(int)$year) - time())/86400); if( $remain > 1 ){ return $daysremain = "Осталось дней - <strong>($remain)</strong>"; } else if($remain == 1 ){ return $daysremain = "Остался <strong>1</strong> день"; } else{ return $content; } } add_shortcode('newyear', 'content_countdown_day');
Использование в теле записи/страницы:
[newyear month="01" day="01" year="2018"] Новый год! Давайте праздновать! [/newyear]
Если не работают шорткоды в шорткоде
Все вышеприведенные шорткоды призваны прятать/показывать некоторый HTML код на ваших страницах. Но что произойдет, если в шорткод заключить шорткод? Правильно, вложенный шорткод не будет работать. Такой конфликт случится, например, если вы попытаетесь вложить в шорткод контактную форму, например так:
[month month="1"] [соntаct-fоrm-7 id="6122" title="Контактная форма"] [/month]
Чтобы заставить шорткод работать в шорткоде WordPress нам необходимо заменить всего одну строку в функциях приведенных здесь шорткодов. Строчку:
return $content;
заменить на:
return do_shortcode($content);
Все должно работать!
Доьрый день!
Можно ли отобразить видимость контента в зависимости от выбранной группы. Например публикацию записи видят только Админы но не видят Участники или Редакторы?
Класс!!! Добавил в избранное ;)
Скажите, а как-то можно показать какой-то блок (div) в записях, но не показывать на страницах?
Например, я добавил для записей (новостей) блок с призывом оставлять комментарии. Добавил прямо в singular.php. Но я не хочу, чтобы этот блок был виден на Страницах (Контакты, Автор, О проекте). Как тут быть?
Заранее спасибо!
Такая конструкция проверяет, находимся ли мы на страницах записи (не страницы, а записи). Если да, то выполняем код:
# Отключить видимость контента в диапазоне дат и месяца
Использование в теле записи/страницы:
# Видимость контента в диапазоне дат и месяца
Использование в теле записи/страницы:
Здравствуйте ! Шикарные шорткоды, очень полезные, лично для меня это клад! Подскажите а можно сделать шорткод что бы открывалась видимость только определённому пользователю, например с именем "Александр" ? А остальные ( зарегистрированные разумеется) пользователи этого контента бы не видели ? Спасибо. А ещё круче было бы что бы была возможность с бэкэнда подставлять значения и открывался бы определённый контент..
А как сделать что бы контент менялся автоматически.
Например у меня есть на каждую неделю, свой контент,
и чтобы он выводился на страницу в зависимости от номера недели.
Большое спасибо за материал, очень полезно!
Скажите, в вашей практике встречалась реализация показа части контента через метку в URL ?
Например при переходе на http://domen.ru/coolpage/ контент странице скрыты
А при переходе через http://domen.ru/coolpage/?content=active будет отображён скрытый контент
Такое можно сделать?
Спасибо за ответ и отдельно ещё раз спасибо за "Видимость контента после наступления даты" (вот прямо помогло!) !
Это обычный GET запрос. Применительно к PHP языку, обрабатывается так:
Здравствуйте! Подскажите, а как сделать так, чтобы контент отображался не в один день недели, а в два, к примеру в понедельник и пятницу?
Можно создать два контейнера для определенных дней недели:
и
Спасибо за помощь!