Поддержка Темы и шаблоны Управление виджетами

  • Подскажите, пожалуйста, как можно (желательно не использовать плагины) настроить отображение виджета так, чтобы он не отображался в режиме просмотра не опубликованного поста (страницы). Может добавить какой-нибудь код в редакторе?

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Модете попробовать с помощью css

    Так подскажите, как сделать при помощи кода.

    Я не знаю что вы называете «кодом». Более того, я никаких «кодов» не знаю. Именно по этому предложил вам попробовать стили.
    Поскольку стили для каждого сайта, как правило, строго индивидуальны, то если вы дадите адрес страницы с проблемой, вам попытаються помочь.

    Есть такой язык программирования, php называется, на нем написан, насколько я знаю, вордпресс. При чем здесь стили вообще? Задача стоит функциональная — убрать определенные виджеты в режиме авторизованного пользователя для не опубликованных постов (записей) на сайте.

    Могу проще объяснить, нужно каким-то образом определять, что страница (запись) в режиме предварительного просмотра и не опубликована (может есть какая-то переменная), и отключать некоторые виджеты программно, так как страница еще находится на этапе редактирования.

    При чем здесь стили вообще?

    Автомобили двигаются за счет ДВС, при чем тут колеса вообще?

    ну удачи с такими знаниями.

    Модератор Yuri

    (@yube)

    попробуйте так

    add_filter('sidebars_widgets', function($widgets) {
      global $post;
      if ( is_admin() or ! is_user_logged_in() or $post->post_status != 'publish') return $widgets;
    // удаление элемента массива
      return $widgets;
    });
    

    код писан на коленке, поэтому солить по вкусу, варить до готовности

    Спасибо, Юрий за ответ, попробую сделать, как Вы предложили. Странно, что некоторые участники форума часто позволяют себе флуд и оффтоп не по теме, вместо конкретного предложения решения вопроса.

    Подскажите, пожалуйста, а как можно отключить/включить определенный виджет по id или другому параметру? Вообще правильно понимаю, что виджеты — это массив?

    Модератор Yuri

    (@yube)

    Добавьте отладочный вывод print_r($widgets) и посмотрите, что там в массиве ))

    Я добавил

    <pre>
    <?php
     print_r($widgets);
    ?>
    </pre> 
    
    в файл sidebar.php

    Где должно отображаться?

    Я совсем не специалист в php, если бы знал, то уже бы решил вопрос по виджетам. По другим языкам имею представление, но тут другая логика и подход, поэтому и спрашиваю, и подразумеваю, что виджет — это элемент массива, т.е. скорее всего экземпляр класса, у которого должны быть свои поля и методы, например, метод hide(). А так я понимаю, что нужно каждый раз искать виджет в массиве виджетов сайдбара, удалять его из массива, потом опять добавлять… Или можно его просто спрятать как-то?

    • Ответ изменён 2 года, 11 месяцев назад пользователем jeanwinters.
    Модератор Yuri

    (@yube)

    в файл sidebar.php

    надо внутрь обработчика хука ‘sidebars_widgets’, иначе выводить будет нечего

    Где должно отображаться?

    На экране.

    Я совсем не специалист в php,

    Придется или разбираться, или нанимать кого-то, кто уже немного разобрался.

    А так я понимаю, что нужно каждый раз искать виджет в массиве виджетов сайдбара, удалять его из массива,

    я так и написал: удаление элемента массива

    потом опять добавлять…

    Виджет добавляется в сайдбар в админке, а мы его убираем из вывода при определенных условиях. Не выполнятся условия — не будет убирания. Никакого «потом» не существует.

    Или можно его просто спрятать как-то?

    Можно и спрятать через css, если получится сочинить нужный селектор.

    Сделал вывод на экран информации о массиве:

    [sidebar-1] => Array ( [1] => search-2 [2] => recent-posts-3 [3] => text-2 [4] => recent-comments-2 [5] => tag_cloud-4 )

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

    Кажется так неправильно удалять двумерный массив: unset($widgets[‘sidebar-1’][1])

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Тема «Управление виджетами» закрыта для новых ответов.