Inside the WP_Query
, I'm trying to order posts by price.
The problem is that the price value is not manually defined inside an ACF or so, but it comes from an api call made while looping trough posts, like this:
<?php while ( have_posts() ): the_post();
$asin = get_field("asin");?>
<h3><?php the_title(); ?></h3>
<p><?php echo aawp_get_field_value($asin, 'price'); ?></p>
<?php endwhile; ?>
That means that the numeric value (the price) isn't available before actually running $the_query
, so I cannot use something like:
'meta_key' => 'price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
because "price" does not exists at that time.
I searched a lot but I didn't find a solution to this. Maybe I need to order posts after the loop? How would you do that?
Thanks in advance!
EDIT (based on shanebp answer)
I made this way.
<?php
$the_query = new WP_Query( array (
'post_type' => 'prodotto',
'posts_per_page' => 500,
'fields' => 'ids',
'tax_query' => array(
array (
'taxonomy' => 'categoria',
'field' => 'slug',
'terms' => 'uso-quotidiano',
)
),
));
$items = array();
$posts = $the_query->posts;
foreach($posts as $post) {
$asin = get_field("asin");
$price = aawp_get_field_value($asin, 'price');
// refining price value
$price = str_replace(',', '.', $price);
$price = preg_replace("/[^0-9\.]/", "", $price);
$price = (float)$price;
$items[] = array("id"=>get_the_ID(), "price"=>$price);
}
// sorting (asc)
usort($items, function ($item1, $item2) {
return $item1['price'] <=> $item2['price'];
});
// OUTPUT
echo '<section class="suggested_product_card_container">';
foreach ($items as $item) {
$itemPrice = $item['price'];
if ($itemPrice < 29) {
$itemID = $item['id'];
include(locate_template('/template-parts/components/component-suggested-product-card.php'));
}
}
echo '</section>';
wp_reset_postdata();
?>
aawp_get_field_value
? For help with AAWP you should contact AAWP support getaawp.com 3rd party plugin dev support is off topic here