Reputation: 1087
currently I have this to list an array and sort them in lowest to highest but it won't, numbers are sorted to their first digit
<?php
$posts = get_posts(
array(
'post_type' => 'product',
'meta_key' => 'size-in-feet',
'posts_per_page' => -1,
'order' => 'ASC'
)
);
$meta_values = array();
foreach( $posts as $post ) {
$meta_values[] = get_post_meta( get_the_ID(), 'size-in-feet', true );
}
$sizearray = $meta_values;
foreach($sizearray as $sizelist) {
echo '<button class="button" data-filter=".'.$sizelist.'">'.$sizelist.' ft</button>';
}
?>
and the output sorts like this
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".5x4">5x4 ft</button>
<button class="button" data-filter=".9x5">9x5 ft</button>
<button class="button" data-filter=".6x3">6x3 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".21x3">21x3 ft</button>
<button class="button" data-filter=".11x8">11x8 ft</button>
<button class="button" data-filter=".13x12">13x12 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".7x5">7x5 ft</button>
<button class="button" data-filter=".10x6">10x6 ft</button>
how can I make it to sort to like this, lowest to highest
<button class="button" data-filter=".5x4">5x4 ft</button>
<button class="button" data-filter=".6x3">6x3 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".6x4">6x4 ft</button>
<button class="button" data-filter=".7x5">7x5 ft</button>
<button class="button" data-filter=".9x5">9x5 ft</button>
<button class="button" data-filter=".10x6">10x6 ft</button>
<button class="button" data-filter=".11x8">11x8 ft</button>
<button class="button" data-filter=".13x12">13x12 ft</button>
<button class="button" data-filter=".21x3">21x3 ft</button>
Thanks
Upvotes: 1
Views: 65
Reputation: 1087
I was able to come up with a solution
<?php
$posts = get_posts(
array(
'post_type' => 'product',
'meta_key' => 'size-in-feet',
'posts_per_page' => -1,
'order' => 'ASC'
)
);
$meta_values = array();
foreach( $posts as $post ) {
$meta_values[] = get_post_meta( get_the_ID(), 'size-in-feet', true );
}
$sizearray = array_unique($meta_values);
$sizearray_sorted = natsort($sizearray);
foreach($sizearray as $sizelist) {
echo '<button class="button" data-filter=".'.$sizelist.'">'.$sizelist.' ft</button>';
}
?>
I just added the natsort() function and the order is working fine
Upvotes: 2