按元值对WP_QUERY进行排序,其中该值是数组

时间:2015-11-30 作者:NakedCat

我有一个WordPress自定义查询:

$args = array(
    \'posts_per_page\' => 2,
    \'meta_key\' => \'pworks_popular_posts\',
    \'paged\' => $page_nr
);

$query = new WP_Query($args);

if($query->have_posts()) {
    while($query->have_posts()) {
        $query->the_post();
        $pworks_post_meta = get_post_meta(get_the_ID(), \'pworks_popular_posts\', true);
        $pworks_post_list[get_the_ID()] = $pworks_post_meta[\'Post visited\'];
    }
}
我使用此方法对帖子ID数组和帖子访问进行排序,然后使用arsort 并按访问次数显示帖子列表:

arsort($pworks_post_list);
然而,我意识到,如果我继续这样做,分页将是一场噩梦,因为没有办法进入排序结果的特定页面,只有未排序的结果。

要做到这一点,我必须按meta\\u值排序帖子,并放弃arsort() 方法

问题是-元值是一个如下所示的数组(我这样做是因为我以后很可能会向该数组添加更多字段):

array(1) {
  ["Post visited"]=>
  int(0)
}

Is there a way to order the query by this "Post visited" array field in WP_Query?

我将非常感谢你的帮助。

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

在查询级别?Not possible.

{db_prefix}_postmeta 只有一个值字段。WP在插入数组之前对其进行序列化,在数组退出后对其进行反序列化。因此,您有三个选择:

如果您真的需要在查询级别进行排序(可能是分页?)您必须重新考虑您的信息体系结构,并开始使用单独的custom_post_meta 要按其排序的每个字段的字段。

忘记排序。

如果您的物品数量有限,并且将保持有限,您可以使用(posts_per_page=-1) 并用array_multisort(). 正如您所料,这将使页面速度降低一点(取决于具有该特定内容的帖子总数custom_post_meta).

作为选项1的变体,出于性能原因,根据项目数量和数据复杂性,您可能会考虑不使用custom_post_meta 可以,但请将其存储在单独的自定义表中。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请