Доступны ли виджеты WordPress (или боковой панели)?
Я пытаюсь отфильтровать весь вывод виджета через простой фильтр, но не могу найти никаких крючков и надеялся быть направленным в правильном направлении. Или, возможно, мои усилия даже не возможны?
Мой простой фильтр выглядит примерно так:
function clean_widget_output( $input ) {
return str_replace( array( "\t", "\n", "\r" ), '', $input );
}
add_[FILTER OR ACTION]( 'need_a_hook', 'clean_widget_output', 99 );
Любые идеи? Я новичок в PHP, но я могу обойти.
Ответы
Ответ 1
Это было обусловлено необходимостью/желанием очистить ужасный HTML-код, изверженный виджетами WordPress. Мне нравится то, что они делают, но некоторые из результатов заставляют меня плакать.
Короткий ответ output buffering
, потому что я не мог найти никаких виджета или перехватчиков боковой панели.
Долгий ответ:
function tidy_sidebar( $sidebar_name_or_id )
{
ob_start();
$bool = dynamic_sidebar( $sidebar_name_or_id);
if ( $bool )
{
$str = ob_get_contents();
$str = 'do cleanup stuff...';
}
else
{
$str = '';
}
ob_end_clean();
return $str;
}
Затем вызовите echo tidy_sidebar( 'sidebar-name-or-id' );
из своей темы.
Ответ 2
У меня была аналогичная проблема, и, просмотрев список всех перехватов фильтров WordPress от Адама Брауна , выяснилось, что необходимый мне крючок существует ( widget_title
, как упоминает pxl), но что нет никакого крючка, чтобы получить весь вывод виджета. Я думал, что я подробно остановимся на решении, которое сработало для меня.
Теоретически, крюк widget_title
должен влиять на все виджеты в вашем блоге, но я уверен, что некоторые сторонние виджеты пренебрегают включением необходимой строки кода для применения каких-либо фильтров заголовков, чтобы он не был надежным. Тем не менее, это сработало для меня, и его можно использовать для применения специального "короткого кода" (точнее, в данном случае, "длинного кода" ) или синтаксиса к вашим названиям виджетов. Например, я хотел иногда включать html-код в мои заголовки виджетов, но по умолчанию все html удаляются. Итак, чтобы добавлять теги типа <em>
к текстам в некоторых моих заголовках, я выбрал специальный синтаксис: [[
вместо <
и ]]
вместо >
(например, [[em]]
и [[/em]]
), а затем создала функцию в моем файле functions.php темы для обработки этого настраиваемого синтаксиса и заменила его эквивалентом html:
function parse_html_widget_title( $text ) {
return str_replace(array('[[', ']]'), array('<', '>'), $text);
}
Затем я добавил строку под ним, чтобы добавить функцию в качестве фильтра:
add_filter('widget_title', 'parse_html_widget_title', 11); // 11 is one above the default priority of 10, meaning it will occur after any other default widget_title filters
Функциональность add_filter
/apply_filter
автоматически передает фильтруемое содержимое в качестве первого параметра функции, указанной в качестве фильтра, так что все, что вам нужно сделать.
Чтобы сделать что-то похожее для основного вывода виджета, вам нужно будет посмотреть на все ваши виджеты, чтобы увидеть, какой крюк они используют, и убедиться, что у них есть фильтр для их основного вывода, чем использовать add_filter()
для каждый найденный вами крючок с вашей пользовательской функцией обратного вызова (например, он widget_text
для вывода текстового виджета или get_search_form
для формы поиска [вы можете увидеть его в wp-includes/general-template.php в get_search_form()
function]). Проблема в том, что некоторые динамически созданные виджеты не имеют крючков (например, виджет Meta), поэтому решение для буферизации вывода Jeff является самым универсальным, хотя и не идеальным решением.
Ответ 3
есть много крючков для виджетов Wordpress, которые не документированы. Wordpress codex не перечисляет их, по какой бы причине (например, эти крючки могут измениться в будущем и неожиданно прервется новыми обновлениями и версиями)... поэтому используйте их с особой осторожностью.
чтобы узнать, что они собой представляют, есть как минимум 2 места:
<wordpress install directory>/wp-includes/default-filters.php
<wordpress install directory>/wp-includes/default-widgets.php
содержащийся в этих двух файлах, является довольно хорошим списком всех используемых в Wordpress приложений.
Примером может служить фильтр для виджетов: widget_title
используйте их с осторожностью, они не гарантируют работу за определенной версией кода, который вы ищете.
Ответ 4
Я не уверен, когда они представили фильтр widget_text, возможно, они не имели его в '09, когда этот вопрос изначально был задан, но так как он есть сейчас, и для всех, кто получает этот stackoverflow, как я сделал из Google, и просто случается, чтобы прочитать достаточно далеко, чтобы увидеть этот ответ, теперь это довольно просто:
function my_widget_filter( $content )
{
// manipulate $content as you see fit
return $content;
}
add_filter( 'widget_text', 'my_widget_filter', 99 );
Ответ 5
Также возможно проверьте dynamic_sidebar_params filter -
Еще одна ссылка -