【问题标题】:Wordpress sort custom field integer by DESC and decimal by ASCWordpress 按 DESC 对自定义字段整数排序,按 ASC 对小数排序
【发布时间】:2018-10-06 20:34:35
【问题描述】:

是否可以按 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

我已经看到我可以使用两个自定义字段来解决这个问题,但我宁愿只更新一个字段,除非它太复杂以至于不值得。

[以下 cmets 后的其他信息]

我目前正在使用以下 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”的值还在页面上显示为数字。如果我遗漏了您需要回答的任何信息,请随时纠正我。

【问题讨论】:

  • 您需要更具体。您是否通过 WP_Query 请求检索此数据?这是 $wpdb 查询吗?数据需要采用什么格式才能使用?
  • 现在这样更有帮助吗?我已经添加了我的 WP_Query 和值的显示方式。
  • 好多了,ta。只是让人们看到你正在提取的数据的结构。
  • 就个人而言,为了便于实施,我将子项设为主项的子项,然后使用您的查询拉入父项,并在模板内拉入其下方的每个子项。似乎是最简单的方法,不必构建帖子数组,按小数点前的内容排序,获取小数点后的所有内容,按子数组排序,然后将其输出到模板。
  • 谢谢,这很有帮助,我不知道帖子的父子关系,所以我学到了一些新东西。当您建议不要尝试将自定义字段解析为两个值时,您为我回答了这个问题。最后,我添加了第二个名为“子订单”的自定义字段,并按两者排序,因为我已经知道该怎么做,而且只花了几个小时。

标签: wordpress


【解决方案1】:

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

WP_Query 执行此操作的参数如下。其中大部分取自 Wordpress Codex 中 this page 的最后一个解决方案,但该示例未显示如何将值声明为数字而不是您在 meta_query 中使用 'type' =&gt; '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
);
?>

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多