优化WP元查询以获取大量的帖子元数据?

时间:2018-05-17 作者:RobbTe

我有一个大的WP站点,有大约2k个帖子和150k个Posteta。当浏览到一个大类别时,归档文件的加载速度非常慢,因为WP查询会首先显示特色帖子。我知道最终的目标是优化Posteta表,但现在我想知道是否有任何可能的方法来优化下面的元查询(底部的一个)。

我做了一些调试(参见//注释),发现“比较”=>“!=”导致查询速度非常慢。我还发现“或”<;\'查询速度大大加快,结果也一样,但我不确定这样做是否合适。请让我知道是否有办法加快此查询。谢谢

function appthemes_addon_on_top_query( $wp_query ){

    $addon_type = $wp_query->get( \'addon_on_top\' );

    if( ! $addon_type || ! appthemes_addon_exists( $addon_type ) ) {
        return;
    }

    $addon_info = appthemes_get_addon_info( $addon_type );
    $flag_key   = $addon_info[\'flag_key\']; //custom field for featured posts
    $meta_query = (array) $wp_query->get( \'meta_value\', 1 );
    $meta_query = array_filter( $meta_query );
    $meta_query[] = array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => $flag_key,
            \'compare\' => \'NOT EXISTS\',
        ),
        array(
            \'relation\' => \'OR\',
            //Deleting the array below makes the query quick, but i need it to show featured posts first
            array(
                \'key\'   => $flag_key,
                \'value\' => 1,
            ),
            //Deleting the array below makes the query quick, but i need it to properly sorting the posts by date (see below: $wp_query->set( \'orderby\')
            array(
                \'key\'     => $flag_key,
                \'value\'   => 1,
                \'compare\' => \'!=\', //It is about this comparison. \'\' or \'<\' makes the query quick, but i am not sure if that is a proper replacement. Also not sure why \'!=\' makes it this slow.
            ),
        ),
    );

    $wp_query->set( \'meta_query\', $meta_query );
    $wp_query->set( \'orderby\', array( \'meta_value\' => \'DESC\', \'date\' => \'DESC\' ) );
}

1 个回复
最合适的回答,由SO网友:RobbTe 整理而成

好吧,我发现了\'compare\' => \'!=\' 减慢速度,但是\'compare\' => \'<>\' 没有。我想两者都是一样的,所以我想这个问题已经解决了。

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在