我可以合并2个新的WP_QUERY($Variable)吗?

时间:2012-06-17 作者:Rory Rothon

我正在运行一个多站点网络,我已经设置了一个使用swith\\u to\\u blog()的sql查询;并查询帖子。

是否有一种方法可以在新的WP\\U查询中声明查询,并将该查询与另一个查询合并?

基本上,如果我这样做:

$number1 = new WP_Query($multisitequery);
我可以将其与以下内容合并:

$number2 = new WP_Query($normalquery);
$normalquery 保存分页、每页、摘录、标题等设置。。。在公文包短代码上。

我希望它包括我的新$multisite 查询

这能实现吗?只是想避免我创建一个全新的快捷码设置哈哈

非常感谢。罗里

EDIT========

我拥有的是:

$portfolio = array();
$portfolio = $settings;
进一步往下看我的投资组合功能“在所有$设置[\'options\']”之后,我有:

$portfolio_query = new WP_Query( $portfolio );
the$portfolio_query 在页面模板上使用循环。

我想添加一个额外的查询,如下所示:

global $wpdb, $blog_id, $post;

$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM wp_blogs ORDER BY blog_id" ) );

$globalcontainer = array();

foreach ($blogs as $blog){

   switch_to_blog($blog->blog_id);

   $globalquery = query_posts($args);

   $globalcontainer = array_merge( $globalcontainer, $globalquery );

   restore_current_blog();
}
我假设$globalcontainer 将是要合并到wp_query();.

因此,从理论上讲,我可以简单地:

$mergedqueryargs = array_merge($portfolio , $globalcontainer);
$portfolio_query = new WP_query($mergedqueryargs);
这是正确的吗?

其次,关于array\\u merge array key overwrite。。。。。如何停止覆盖?

4 个回复
SO网友:guidod

仅仅合并参数并没有多大用处,需要合并生成的posts数组和post\\u count计数。这对我很有用:

//setup your queries as you already do
$query1 = new WP_Query($args_for_query1);
$query2 = new WP_Query($args_for_query2);

//create new empty query and populate it with the other two
$wp_query = new WP_Query();
$wp_query->posts = array_merge( $query1->posts, $query2->posts );

//populate post_count count for the loop to work correctly
$wp_query->post_count = $query1->post_count + $query2->post_count;

SO网友:Bora Yalcin

我通常会合并它们的ID数组并进行第三次查询。为了降低第一组查询的成本,我只使用如下fields参数返回它们的ID:

//setup your queries with extra parameter fields => ids
$query1 = new WP_Query(array(\'fields\' => \'ids\',\'other_parameters\' => \'etc\'));
$query2 = new WP_Query(array(\'fields\' => \'ids\',\'other_parameters\'=>\'etc\'));

//now you got post IDs in $query->posts
$allTheIDs = array_merge($query1->posts,$query2->posts);

//new query, using post__in parameter
$finalQuery = new WP_Query(array(\'post__in\' => $allTheIDs));
希望这有帮助

---EDIT---

在我的回答之后,原始问题被编辑为多站点详细信息。在多站点后期合并的情况下,这不起作用。

SO网友:Chip Bennett

因此,如果您有:

$number1 = new WP_Query($multisitequery);

$number2 = new WP_Query($normalquery);
我想你以前在什么地方定义过这些?

$multisitequery = array();
$normalquery = array();
。。。在这种情况下,要合并这两个查询,只需array_merge() 将这两个数组传递给new WP_Query():

$merged_query_args = array_merge( $normalquery, $multisitequery );

$merged_query = new WP_Query( $merged_query_args );
请注意,顺序在array_merge() 呼叫如果两者具有相同的数组键,则第二个数组将覆盖第一个数组。

SO网友:Igor Eremenko

因此,您可以将两个WP_Query 具有不同post_type 或其他排序数据,然后通过ids 合为一体WP_Query 完全有效的查询-为了在粘合时保留排序,您需要指定排序方式(>);post\\uu输入

我的例子是它如何创建一个新的WP_Query 循环,并可以通过调用new global_change_of_sorting_posts->change_query_posts() => query_posts() 您需要在处理显示帖子的周期之前调用!

class global_change_of_sorting_posts
{
    public function get_posts_ids()
    {
        $query1 = new WP_Query([
            \'fields\' => \'ids\',
            \'posts_per_page\' => -1,
            \'post_type\' => \'post\',
        ]);
        $query2 = new WP_Query([
            \'posts_per_page\' => -1,
            \'fields\' => \'ids\',
            \'post_type\' => \'custom-post\',
        ]);
        $merge_ids_posts = $query1->posts + $query2->posts;
        wp_reset_query();
        return $merge_ids_posts;
    }

    public function get_posts_wp_query()
    {
        $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
        $posts_per_page = 40;
        $wp_query = new WP_Query([
            \'posts_per_page\' => $posts_per_page,
            \'paged\' => $paged,
            \'post__in\' => $this->get_posts_ids(),
            \'orderby\' => \'post__in\',
        ]);
        while ($wp_query->have_posts()) {
            $wp_query->the_post();

            var_dump(get_the_ID());
        }
    }

    public function change_query_posts($query_string)
    {
        parse_str($query_string, $args);
        $args[\'post__in\'] = $this->get_posts_ids();
        $args[\'orderby\'] = \'post__in\';
        query_posts($args); # query conversion
    }
}

结束

相关推荐

Single install or multisite?

我在努力满足这个客户的要求时遇到了一点僵局。长话短说,他们希望有一个特定用户可以访问和修改的整体网站,再加上一个外观和感觉完全不同的博客。他们当前的网站刚刚重新设计,我将主要移植到WordPress。他们还有一个WordPress博客,位于/博客上,运行一个基于Kubrick主题的过时WP-他们希望保留该主题/样式。以下是问题:他们希望从一个后端管理所有内容,他们希望具有不同外观和感觉的博客驻留在/博客上,以获取已经存在的链接(多站点不允许这样做)</博客页面应该是一致的-类别、单个帖子、档案等搜索