仅对主查询运行POSTS_WHERE和POSTS_JOIN

时间:2015-03-05 作者:Morgan Delaney

使用pre_get_posts 胡克,我可以$query 作为论据。但在posts_whereposts_join hook,我收到的是相应的子句,而不是查询。问题是钩子正在每个查询上运行,而不仅仅是主查询。

给定以下代码,该代码将在页面运行的每个查询上执行一次:

add_filter(\'posts_join\', \'my_join\');
function my_join($join) { echo \'lala\'; return $join; }
如何判断查询是否是主查询,使其只运行一次?

1 个回复
SO网友:Morgan Delaney

当然我只需要设置$accepted_args 的参数add_filter() 至2。像这样:

add_filter(\'posts_join\', \'my_join\', 10, 2);
function my_join($join, &$query) { echo $query->is_main_query() ? \'y\' : \'n\'; return $join; }

结束

相关推荐

使用wpdb,而不通过wp-load.php加载所有插件

我正在努力prevent WP from loading all plug-ins 包括wp负载时。php,因为我真的不需要它们,也不需要通常的WP操作/过滤器。我只需要WPDB类就可以轻松地查询数据库。我只找到了an (old) solution 这涉及到定义WP\\u安装以诱骗WP不加载插件,但我不确定它是否仍然适用于当前版本和/或是否有更好的方法。(背景:我正在尝试优化一个简单的自动完成PHP脚本,该脚本通过AJAX提供JSON结果,在通过wp load.PHP初始化$wpdb之后进行一些简单的查询