gpt4 book ai didi

php - add_filter 与 add_action 之间的区别

转载 作者:可可西里 更新时间:2023-11-01 13:28:00 24 4
gpt4 key购买 nike

我正在查看我的 functions.php 并想知道为什么代码 A 使用 add_action 而代码 B 使用 add_filter
CODE A 的主要目标是包括和排除特定类别。
CODE B 的主要目标是排除特定类别。

代码A使用add_action是否正确
和代码 B 的 add_filter



代码 A:显示主页的特定类别(称为“特色”),而不是“最新帖子”

function featured_category( $query ) {

if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'category_name', 'featured' );
$query->set( 'category__not_in', array(60, 61) );
$query->set( 'posts_per_page', 5 );
}
}
add_action( 'pre_get_posts', 'featured_category' );



代码 B:排除搜索结果的“赞助帖子类别”

function search_filter($query) {

if ( $query->is_search && $query->is_main_query() ) {
$query->set('post_type', 'post');
$query->set( 'category__not_in', array(60, 61) );
$query->set( 'posts_per_page', 20 );
}

return $query;
}
add_filter('pre_get_posts', 'search_filter');

最佳答案

pre_get_posts 是一个 Action 而不是过滤器。 $query 通过引用传递,这就是为什么 CODE A 工作而不返回任何内容的原因。

CODE B 返回 $query 但该代码再次起作用,因为查询已通过引用传递。钩子(Hook)的返回值没有分配给任何东西。

do_action_ref_array( 'pre_get_posts', array( &$this ) ); 

add_actionadd_filter 在不同的上下文中使用,但代码是相同的(add_actionadd_filter )。虽然发布的两组代码都可以正常工作,但正确的用法是 add_action

关于php - add_filter 与 add_action 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26458037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com