如何将所有WordPress小部件限制为给定类别?

时间:2010-02-27 09:05:02

标签: wordpress widget categories add-filter

如何将所有WordPress小部件限制为给定类别?例如,在我的侧边栏上有一个弹出列表框,可以让我选择一个鸟类,并且该侧边栏上的所有小部件数据都会粘贴给定的鸟类。我想我需要使用add_filter()进行某种过滤,但不了解该过程。关于这方面的文档是不完整的。

1 个答案:

答案 0 :(得分:0)

我对使用查询过滤器感到非常紧张,因为它太过于原生于WordPress的SQL API,因此有可能在未来的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(aka Links)小部件,然后让你正常显示的每个其他小部件。

这解决了我的问题,因为现在我可以重绘这些小部件,但这次是通过类别限制来实现的。据我所知,到目前为止,我可以使用一点WordPress Codex来获取这些小部件显示所需的数据,如果需要可以按类别过滤,然后我甚至可以使用一些例如绘制的东西日历或标签云。