Пт. Янв 21st, 2022

    Иногда бывает полезным скрыть и/или показать часть контента в записях/страницах 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);

    Все должно работать!

    Источник https://seo-zona.ru/wordpress-upravlenie-vidimostyu-kontenta-2017-10-08.html
    От Вячеслав Скоблей

    от Andrew