WordPress按DESC排序自定义字段整数,按ASC排序十进制

时间:2018-10-04 14:24:14

标签: wordpress

是否可以为单个自定义字段按DESC对整数排序,然后按ASC对小数排序?

我有一个自定义帖子类型,其自定义字段称为“订单”。 Order中存储的值是整数和十进制:01、02、03、03.01、03.02、03.03、04等。其中十进制值是整数值的子主题(请参见下面的示例)。

如果我按照DESC的顺序对“订单”进行排序,则会得到:

04 Vans
03.03 Vauxhall
03.02 Nissan
03.01 Honda
03 Cars
02 Buses
01 Bicycles

我想以ASC的顺序对所有十进制值进行子排序,如下所示:

04 Vans
03 Cars
03.01 Honda
03.02 Nissan
03.03 Vauxhall
02 Buses
01 Bicycles

我已经看到我可以通过两个自定义字段来解决此问题,但我宁愿只更新一个字段,除非它是如此复杂而不值得。

[以下评论后的其他信息]

我目前正在使用以下WP_Query检索内容:

<?php
$args=array(
 'post_type' => 'vehicleposts',
 'post_status' => 'publish',
 'meta_key' => 'Order',
 'orderby' => 'meta_value_num',
 'order' => 'DESC',
 'nopaging' => true // Disable post limit per page
);
$customQuery = null;
$customQuery = new WP_Query($args);
?>
<?php if ( $customQuery->have_posts() ) while ($customQuery->have_posts() ) : $customQuery->the_post(); ?>
<?php get_template_part( 'vehicle', 'posts' ); ?>
<?php endwhile; wp_reset_query(); ?>

“ Order”的值不仅用于排序,而且还在页面上显示为数字。如果我省略了您需要回答的任何信息,请随时纠正我。

1 个答案:

答案 0 :(得分:0)

请参阅我对@ThallerThanYall的评论。按照他的建议,我决定不尝试通过解析单个自定义字段来尝试解决方案,而只是为子订单添加第二个字段。这样就可以按顺序和子顺序对帖子进行排序。我正在发布解决方案,以防其他人使用。

WP_Query执行此操作的参数如下。大部分内容取自Wordpress Codex中this page上的最后一个解决方案,但是该示例未显示如何声明值是数字而不是在meta_query中使用'type' => 'Numeric'的字符串。

<?php
$args=array(
  'post_type' => 'vehicleposts',
  'post_status' => 'publish',
  'meta_query' => array(
    'relation' => 'AND',
    'vehicle_order' => array(
      'key' => 'Order',
      'type' => 'Numeric'
    ),
    'vehicle_suborder' => array(
      'key' => 'Sub order',
      'type' => 'Numeric'
    ),
  ),
  'orderby' => array(
    'vehicle_order' => 'DESC',
    'vehicle_suborder' => 'ASC'
  ),
  'nopaging' => true // Disable post limit per page
);
?>