如何使用Pre_Get_Posts来定位默认的最近帖子和最近评论小部件?

时间:2012-06-12 作者:Ana Ban

我在函数中添加了以下内容。php:

add_action(\'pre_get_posts\', \'keyl_get_emp_posts\');
function keyl_get_emp_posts($query) {
    if ($query->is_main_query())
        $query->set(\'post_type\', \'employee\');
}
到目前为止,它有效地过滤掉了搜索结果。不过,默认的小部件“最近的帖子”和“最近的评论”并没有改变。有什么好处?

2 个回复
SO网友:MZAweb

在每个查询之前执行pre\\u get\\u posts。您的$query->is\\u main\\u query()使此代码仅更改主查询的查询。因此,如果您在归档页面中,您只修改归档帖子,而不修改任何其他查询(小部件、菜单等)。

但是请注意,您在那里添加的代码将更改所有主要查询的查询。因此,如果您转到另一个职位类型档案(类别等),您将修改查询以获取post\\u type=employee

SO网友:s_ha_dum

两者"Recents Posts" widget 以及"Recent Comments" widget 提供一个过滤器,您可以使用它来更改查询,它们可以方便地接受相同的参数。

function alter_recent_widget_post_type_wpse_54931($args) {
  $args[\'post_type\'] = \'employee\';
  return $args;
}
add_filter(\'widget_posts_args\',\'alter_recent_widget_post_type_wpse_54931\');
add_filter(\'widget_posts_args\',\'alter_recent_widget_post_type_wpse_54931\');
这将在每次运行小部件时改变它们,因此如果您需要小部件在多个上下文中运行,您将需要更复杂的东西。

结束

相关推荐

Remove Widgets in Dashboard

另一个noob问题。。。当作者登录并访问其仪表板时,他们会看到各种小部件,例如Internet Explorer警告、WordPress动态新闻。是否要为所有用户(现在和将来)删除所有这些内容,以便他们只看到“快速按”&;\'现在的小部件?谢谢