admin管理员组文章数量:1314504
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();
?>
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();
?>
Share
Improve this question
edited Nov 25, 2020 at 8:33
Luca
asked Nov 22, 2020 at 16:31
LucaLuca
134 bronze badges
2
|
1 Answer
Reset to default 1In your WP_Query
, only return ids
.
https://developer.wordpress/reference/classes/wp_query/#return-fields-parameter
Create an empty array, $myArray = array();
.
Then loop thru the results of the query, $your_query->posts
and fetch your field value for each id and add the result and the id to a new array in $myArray
.
Then sort the arrays in $myArray
by the price.
Then do a loop thru $myArray
to output the display you want for each post id.
本文标签: How to order posts by metavalue created inside loop
版权声明:本文标题:How to order posts by meta_value created inside loop? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741965787a2407540.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
aawp_get_field_value
? For help with AAWP you should contact AAWP support getaawp 3rd party plugin dev support is off topic here – Tom J Nowell ♦ Commented Nov 22, 2020 at 21:50