用WP_Query排序数值

时间:2018-11-27 14:34:01

标签: wordpress sorting custom-post-type

我正在尝试根据输入到分配的MetaBox中的数字对我的自定义帖子类型进行数字排序。我输入的数字带有逗号,并正确显示在数据库中。但是,当基于下面的代码显示交易时,它会将所有的第一个数字一起列出1、2、3、4、5、6,最低的数字排在最前面,而最高的数字排在最后。问题是当涉及到逗号6,000时,列在6,000,000旁边。我想做的是sis首先列出高度数字(deal_amounts),最后列出最低的数量。我正在尝试根据总数而不是第一个数字对它们进行排序。

 $transaction = new WP_Query( array( 
                'post_type'         => 'transactions', 
                'paged'             => $paged, 
                'posts_per_page'    => 50,
                'orderby'           => array( 'meta_value' => 'ASC' ),
                'meta_key'          => 'deal_amount',
            ) );

        if ( $transaction->have_posts() ) :

2 个答案:

答案 0 :(得分:0)

在metap_query中使用meta_value_num进行订购。

$args = array(
        'post_status' => 'publish',
        'post_type' => 'transactions',
        'meta_key' => 'deal_amount',
        'orderby' => 'meta_value_num',
        'order' => 'ASC'
    );

答案 1 :(得分:0)

工作示例

 <?php
    $transaction = new WP_Query( array( 
        'post_type'         => 'transactions', 
        'paged'             => $paged, 
        'posts_per_page'    => 50,
        'orderby'           => array( 'meta_value_num' => 'ASC' ),
        'meta_key'          => 'deal_amount',
    ) );

if ( $transaction->have_posts() ) : ?>
<?php 
while ( $transaction->have_posts() ) : $transaction->the_post();
    $deal_amount = get_post_meta( get_the_ID(), 'deal_amount', true );
    $property_type = get_post_meta( get_the_ID(), 'property_type', true );
    $property_size = get_post_meta( get_the_ID(), 'property_size', true );
?>
<article class="col">

    <div class="trans-content">
        <?php the_title('<h3>', '</h3>'); ?>
        <?php echo '<h4>$' . number_format($deal_amount) . '</h4>'; ?>
        <?php echo esc_html($property_type); ?><br>
        <?php echo esc_html($property_size); ?><br>
        <?php $terms_as_text = get_the_term_list( $post->ID, 'loan-type', '', ', ', '' ) ; echo strip_tags($terms_as_text); ?></p>
    </div>
<?php edit_post_link('edit'); ?>
</article>
<?php endwhile; wp_reset_postdata(); ?>
<?php else : endif; ?>