Управление виджетами
-
Подскажите, пожалуйста, как можно (желательно не использовать плагины) настроить отображение виджета так, чтобы он не отображался в режиме просмотра не опубликованного поста (страницы). Может добавить какой-нибудь код в редакторе?
-
Модете попробовать с помощью css
Так подскажите, как сделать при помощи кода.
Я не знаю что вы называете «кодом». Более того, я никаких «кодов» не знаю. Именно по этому предложил вам попробовать стили.
Поскольку стили для каждого сайта, как правило, строго индивидуальны, то если вы дадите адрес страницы с проблемой, вам попытаються помочь.Есть такой язык программирования, php называется, на нем написан, насколько я знаю, вордпресс. При чем здесь стили вообще? Задача стоит функциональная — убрать определенные виджеты в режиме авторизованного пользователя для не опубликованных постов (записей) на сайте.
Могу проще объяснить, нужно каким-то образом определять, что страница (запись) в режиме предварительного просмотра и не опубликована (может есть какая-то переменная), и отключать некоторые виджеты программно, так как страница еще находится на этапе редактирования.
При чем здесь стили вообще?
Автомобили двигаются за счет ДВС, при чем тут колеса вообще?
ну удачи с такими знаниями.
попробуйте так
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 или другому параметру? Вообще правильно понимаю, что виджеты — это массив?
Добавьте отладочный вывод
print_r($widgets)
и посмотрите, что там в массиве ))Я добавил
<pre> <?php print_r($widgets); ?> </pre> в файл sidebar.php
Где должно отображаться?
Я совсем не специалист в php, если бы знал, то уже бы решил вопрос по виджетам. По другим языкам имею представление, но тут другая логика и подход, поэтому и спрашиваю, и подразумеваю, что виджет — это элемент массива, т.е. скорее всего экземпляр класса, у которого должны быть свои поля и методы, например, метод hide(). А так я понимаю, что нужно каждый раз искать виджет в массиве виджетов сайдбара, удалять его из массива, потом опять добавлять… Или можно его просто спрятать как-то?
- Ответ изменён 3 года, 3 месяца назад пользователем jeanwinters.
в файл 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])
- Тема «Управление виджетами» закрыта для новых ответов.