使用具有2个元密钥的orderby

时间:2015-02-25 作者:qasir

我可以使用orderbyWP_Query 使用以下内容:

\'orderby\'   => \'meta_value_num\',
\'meta_key\'  => \'my_key_1\',
但是,是否可以基于2个元字段的计算使用orderby?

例如,我有两个元字段my_key_1my_key_2. 我想将值键1除以2,然后按该结果排序。类似于

meta_key = my_key_1/my_key_2

1 个回复
SO网友:Przemek Maczewski

其中一个选项是在数据库级别通过动态计算的列进行排序。这对我来说太复杂了。

将您的任务用于生产,我可能会创建第三个元键:“division”派生自这两个元键,并在每次保存后更新其值。然后在WP\\u Query()中按此键排序。

对于少量帖子,第三种选择是对数组进行排序。

定义助手功能:

function sort_by_division( $posts ) {
  foreach ( $posts as $i => $post ) :
    $my_key_1 = (float)get_post_meta( $post->ID, \'my_key_1\', true );
    $my_key_2 = (float)get_post_meta( $post->ID, \'my_key_2\', true ); 
    $division = $my_key_1 / $my_key_2;
    $divisions[$i] = $division;
  endforeach;
  array_multisort( $divisions, SORT_DESC, $posts );
  return $posts;
}
并将其应用于查询结果:

<?php $myposts = sort_by_division( get_posts() ); ?>
<ul>
<?php
foreach ( $myposts as $post ) : setup_postdata( $post ); 
  $my_key_1 = (float)get_post_meta( $post->ID, \'my_key_1\', true );
  $my_key_2 = (float)get_post_meta( $post->ID, \'my_key_2\', true ); 
  $division = $my_key_1 / $my_key_2;
  ?>
  <li>
    <?php the_title(); ?><br>
    my_key_1: <?php echo $my_key_1; ?><br>
    my_key_2: <?php echo $my_key_2; ?><br>
    division: <?php echo $division; ?>
  </li>
<?php endforeach;
wp_reset_postdata();?>
</ul>
正如我所说,由于内存消耗,无法用于大量帖子。具有第三个元键的选项是最有效的。

结束

相关推荐

在Pre_Get_POST操作中按多个orderby参数对WordPress存档进行排序

实际上这是我函数中的私有函数。php可以工作,但是:我经常在第一次加载时收到服务器的错误500,通常它在重新加载页面后呈现。## change the sorting order on archive pages: order archive by title add_action( \'pre_get_posts\', \'gpsp_change_sort_order\'); function gpsp_change_sort_order($query) { if(is_ar