删除挂起查询的建议方法(在PRE_GET_POSTS中)?

时间:2013-01-26 作者:lkraav

看起来电子商务插件的核心查询在某个特定模板中对我没有任何用处,所以我想完全放弃它,转而使用模板中我自己的WP\\u查询循环。这不是主查询,而是我试图在下游放弃的二次循环query\\u posts()调用。

wp remove query 有一些很好的无操作纯SQL建议,但在pre\\u get\\u post中,将其中一个建议粘贴到特定的$查询中,建议使用什么方法?

1 个回复
SO网友:chrisguitarguy

没有真正的方法“停止”主查询。有很多过滤器可以修改它,只是没有什么可以完全关闭它。你能做的最好的事情就是posts_request, 它在命中数据之前激发,并返回一个空字符串或一些不敏感的内容。这仍然会影响数据库。

示例(未测试):

<?php
add_filter(\'posts_request\', \'wpse83187_posts_request\', 10, 2);
function wpse83187_posts_request($sql, $query)
{
    if (!$query->is_main_query() /* other conditionals here! */) {
        return;
    }

    return \'\';
}
而不是创建自己的WP_Query 在模板中查找,为什么不使用pre_get_posts?

然后对至少一个WP\\U查询循环使用“main”循环。直到很久以后才发生数据库命中,所以唯一“浪费”的开销是WP填充查询变量。WP_Query 有一个名为init 这基本上重置了所有内容。调用它,然后设置所需的任何查询变量。那么你需要打电话parse_query 再次设置各种条件。

<?php
add_action(\'pre_get_posts\', \'wpse83187_reset_q\');
function wpse83187_reset_q($query)
{
    if (!$query->is_main_query() /* other conditionals here! */) {
         return;
    }

    $query->init();

    // reset query vars here. eg:
    $query->set(\'post_type\', \'product\');

    // re-run validation and conditional set up.
    $query->parse_query();
}

结束

相关推荐

MySQL上的WPMU限制为1 GB空间?

我的MySQL数据库限制为每1个数据库1024MB,但WPMU网站需要超过这一限制。。。有没有办法让WPMU去使用database_2 什么时候database_1 已接近1024MB?我可以:database_1 1024MBdatabase_2 1024MBdatabase_3 1024MBdatabase_4 1024MB等。我不能有:database_1 8192MB或更多