Intereting Posts
Кэширование плагинов + mod_pagespeed = overkill? Любой способ скрыть текст сообщений в блогах, если он длиннее 300 символов Закрыть окно мода после формы отправить Редактируемый файл студента, связанный с базовым идентификатором пользователя создать новый сайт-сайт в wordpress multisite пользователем-подписчиком вместо сетевого администратора Понимание уязвимостей SVG в WordPress, связанных с определенным исправлением Как указать параметр загрузки файлов в WordPress Widget backend? Вызовите обрезанное изображение настраиваемого поля в теме Зарегистрироваться и ввести в очередь стиль style.css изменить год на всех моих пользовательских типах сообщений? Остановка людей Просмотр черновиков сообщений Получить текущий массив пользователей с строкой post Страница автора, например, wordpress ответы Ограничить просмотр сообщения как на передней, так и на бэкэнд? Как настроить целевой интерфейс MP6 на WordPress 3.8 с помощью CSS?

Заменить строку с именем post_name на боковой панели

Я хотел бы заменить все {POST_NAME} из моих текстовых виджетов на боковой панели single.php . Я думаю о чем-то подобном

 global $post; $POST_NAME= $post->post_name; $sidebar = preg_replace('/\{(POST_NAME)\}/e', "$$1", $sidebar); 

Как получить боковую панель HTML в \$sidebar

Solutions Collecting From Web of "Заменить строку с именем post_name на боковой панели"

Ваш код выглядит хорошо, а соображения правильные. Для достижения вашей цели я собирал HTML и завершал его следующим образом:

Вместо вызова <?php dynamic_sidebar($sidebar_id); ?> <?php dynamic_sidebar($sidebar_id); ?> использовать <?php dynamic_sidebar_replaced($sidebar_id); ?> <?php dynamic_sidebar_replaced($sidebar_id); ?> с функцией (добавьте ее в functions.php) ниже:

 function dynamic_sidebar_replaced($sidebar_id) { if (is_single()) { // Optionally, to ensure you're at the single post template. ob_start(); // Start gathering output dynamic_sidebar($sidebar_id); global $post; $POST_NAME = $post->post_name; $sidebar = preg_replace('/\{(POST_NAME)\}/e', "$$1", $sidebar); ob_end_clean(); echo $sidebar; return ''; } dynamic_sidebar($sidebar_id); } 

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

Единственный способ, с помощью которого я могу гарантировать, что это буфер и захват вывода dynamic_sidebar выполняет вашу замену строки и распечатывает измененную строку.

 ob_start(); dynamic_sidebar( 'sidebar' ); $sidebar_string = ob_get_contents(); ob_end_clean(); echo str_replace( '{POST_NAME}', $post->post_name, $sidebar_string );