WIDGET_POSTS_ARGS未使用WIDGET中的帖子数

时间:2020-02-19 作者:DevSem

所以我用的是widget_posts_args 筛选以在核心“最近的帖子”小部件中拉入自定义帖子类型的帖子。

代码如下:

add_filter(\'widget_posts_args\', function() {
    $params[\'post_type\'] = array(\'post\', \'recipe\');
    return $params;
});
因此,使用上面的过滤器,它实际上是在拉入所有的“post”和“recipe”自定义帖子类型,这是我想要的,但是。。。

通过过滤器,它将Blog pages show at most 在设置页面的“阅读”部分,设置为10。。但问题是,它完全忽视了Number of posts to show 在小部件内部计数。

enter image description here

If I remove the filter, it goes back to using the number inside the widget but I don\'t get my \'recipe\' custom post types

这个小部件定义了5篇文章,但它根据Blog pages show at most - 这是供参考的图片:
enter image description here

以下是标题正确的小部件:
enter image description here

是否有一种方法可以在过滤器中定义应该使用小部件的帖子数?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

问题是,您不是在修改小部件的现有参数,而是在替换它们:

add_filter(\'widget_posts_args\', function() {
    $params[\'post_type\'] = array(\'post\', \'recipe\');
    return $params;
});
该过滤器的结果将是:

$params = [
    \'post_type\' => [ \'post\', \'recipe\' ]
];
因此,任何其他参数,包括默认的帖子数量,都将被删除。

这是因为您不接受过滤器中的原始值。回调函数需要接受此参数,以便修改并返回它:

add_filter(\'widget_posts_args\', function( $params ) {
    $params[\'post_type\'] = array(\'post\', \'recipe\');
    return $params;
});
这就是过滤器的工作原理。您使用一个接受原始值并返回新值的函数。