将自定义SQL查询注入页面/主题

时间:2014-04-09 作者:Richard

我已经为我们的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);
?>

1 个回复
最合适的回答,由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上查看/搜索类似的实现,对于不同的场景,有很多建议的方法,因此您可能只需要找到您需要的。

    结束

    相关推荐

    Hooks for Links Box

    Possible Duplicate:Getting archive pages in WP's AJAX internal link finder? 新的有挂钩吗internal links box 创建于WP 3.1? 我正在尝试在插件中修改它。