Я очень нервничал по поводу использования фильтра запросов, потому что он слишком встроен в SQL API WordPress и, следовательно, потенциально может сломаться в будущих выпусках WordPress - тем более что во время этого ответа на StackOverflow здесь выпуск WordPress 3.0 довольно скоро и может внести некоторые существенные изменения.
Исправление было сосредоточено на полной замене содержимого виджета. Вот пример:
<?php
add_filter('dynamic_sidebar_params','filterWidget');
function filterWidget($args) {
switch($args[0]['widget_name']) {
case 'Meta':
case 'Categories':
case 'Pages':
return 0; //hide widget output
break;
case 'Links':
//display new widget replacement output
echo '<li class="widget"><h2 class="widgettitle">Links</h2>Hello world</li>';
return 0; //hide previous widget output
break;
default:
//echo "<br /><br />";
//print_r($args);
//echo "<br /><br />";
return $args;
} //end switch
}
В этом примере, если вы поместите его в верхнюю часть файла sidebar.php вашей темы, он полностью скроет виджеты Meta, Categories и Pages, заменит виджет Blogroll (ссылки) на совершенно новый контент, а затем пусть все остальные ваши виджеты отображаются нормально.
Это решает мою проблему, потому что теперь я могу перерисовать эти виджеты, но на этот раз я делаю это с ограничением по категориям. Насколько я знаю, я могу использовать немного Кодекса WordPress, чтобы получить данные, необходимые для отображения этих виджетов, фильтрации по категориям, если я хочу, и затем я даже могу использовать некоторые подпрограммы, которые делают такие вещи, как рисование. календарь или облако тегов.