其中一个选项是在数据库级别通过动态计算的列进行排序。这对我来说太复杂了。
将您的任务用于生产,我可能会创建第三个元键:“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>
正如我所说,由于内存消耗,无法用于大量帖子。具有第三个元键的选项是最有效的。