是否可以通过自定义字段产生的动态值对wp_query循环进行排序/重新排序?

时间:2019-06-05 12:52:44

标签: php arrays wordpress loops sorting

我正在尝试找到一种方法,可以对只能通过短代码(通过计算自定义字段地址)获得的数值(距离)对循环进行排序。 shortcode有效,我成功获取了距离值,但现在我想将数据从最近的距离排序到最远的距离。

我试图使用usort,但是我不知道如何正确执行它。


$loop = new WP_Query( $args );

function customCompare($Aint, $Bint)
{
$Aint = $distance;  
$Bint = $distance;
return ($Aint < $Bint);
} 

usort($loop->posts, 'customCompare');

while ( $loop->have_posts() ) : $loop->the_post(); 

$address = get_field('acf_address');
$distance = do_shortcode("[distance address='".$address."']");


im希望显示我的数据从最小距离值到最大距离,但是现在它对我的循环没有任何作用,仅显示默认顺序。这意味着我的代码不起作用。我将不胜感激

1 个答案:

答案 0 :(得分:0)

我更新了代码,将所需的数据保存在数组中,并使用了array_multisort

$merchantPost = get_posts( $args ); 

        foreach ( $merchantPost as $post ) : 
            setup_postdata( $post ); 


            $merchant_list[] = array(
                'acf_address' => get_post_meta( $post->ID, 'acf_address', true ),
                'distance' => do_shortcode("[distance address_to='".get_field('acf_address')."']"),
                'post_title' => get_the_title(),
                'permalink' => get_the_permalink(),
                'gallery' => get_field('gallery'),
                'image' => wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' ),
                'terms' => get_the_terms( $post->ID, 'merchant_categories' ),
            ); 

        endforeach;

       wp_reset_postdata();


        $all_distance = array();
            foreach ( $merchant_list as $mlist ) {
                $all_distance[] = $mlist['distance'];
            }

            array_multisort($all_distance, SORT_ASC, $merchant_list, SORT_NUMERIC);

现在我的问题是分页,因为我没有使用wordpress默认循环。但是那是另一个主题。