我已经为我们的WordPress网站编写了一个自定义sql查询(相当复杂,用标准WordPress代码无法实现),我已经通过$pageposts = $wpdb->get_results($query, OBJECT);
, 它产生了我所期望的结果。现在我想通过一个钩子(理想情况下)集成这个查询,这样我就不必更新主题页面,这样我们仍然可以更新主题。我知道钩子pre_get_posts()
允许您调整主查询,但从我发现的情况来看only 允许你adjust. E、 g。$query->set( \'year\', $today[\'year\'] );
. 但是,我想完全替换查询。
使用挂钩是否可行,以便我可以使用子主题代码中的挂钩来利用主主题代码?
或者我需要将整个页面从主主题克隆到子主题,并使用如下代码:
<?php
$pageposts = $wpdb->get_results($q, OBJECT);
if ($pageposts):
global $post;
foreach ($pageposts as $post):
setup_postdata($post);
?>
最合适的回答,由SO网友:Nicolai Grossherr 整理而成
你正在寻找的钩子可以在WordPress Codex中找到WP_Query
- Filters:
过滤器posts_distinct - 将SQL“DISTINCTROW”子句更改为返回post数组的查询
posts_groupby - 更改返回post数组的查询的SQL“GROUP BY”子句posts_join - 更改返回post数组的查询的SQL“JOIN”子句post_limits - 更改返回post数组的查询的SQL“LIMIT”子句posts_orderby - 更改返回post数组的查询的SQL“ORDER BY”子句posts_where - 更改返回post数组的查询的SQL“WHERE”子句posts_join_paged - 使用返回post数组的查询的“JOIN”子句更改post的SQL分页posts_where_paged - 使用返回post数组的查询的“WHERE”子句更改post的SQL分页posts_clauses - 一次性更改上面的所有SQL子句。它为您提供了一个易于更改的元素数组(可用于Version 3.1). 请注意,过滤器比前面提到的要多。由于很难使法典保持最新,请检查
get_posts();
WP\\u Query类中的函数(/WP includes/Query.php)。
首先,正如注释所述,有比提到的更多的过滤器,其次,所提到的过滤器并没有全部记录在案。您可以对上面列表中包含的内容进行大量处理,但可能需要查看源代码query.php
你自己,去发现你所有的可能性。
因此,在不知道您的SQL和具体计划的情况下,我假设您可以通过使用一个或多个挂钩来做您想要做的事情。在收集了用例所需的信息后,请在WPSE上查看/搜索类似的实现,对于不同的场景,有很多建议的方法,因此您可能只需要找到您需要的。