如何根据循环内创建的meta_value对帖子进行排序?

时间:2020-11-22 作者:Luca

内部WP_Query, 我在试着按价格订购邮件。

问题是,价格值不是在ACF内部手动定义的,而是来自于在循环低谷帖子时进行的api调用,如下所示:

<?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; ?>
这意味着在实际运行之前,数字值(价格)不可用$the_query, 所以我不能用这样的东西:

\'meta_key\' => \'price\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'ASC\'
因为;“价格”;当时不存在。

我搜索了很多,但没有找到解决方法。也许我需要在循环后订购帖子?你会怎么做?

提前感谢!

EDIT(基于shanebp答案)

我是这样做的。

    <?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();

    ?>

1 个回复
最合适的回答,由SO网友:shanebp 整理而成

在您的WP_Query, 仅返回ids.https://developer.wordpress.org/reference/classes/wp_query/#return-fields-parameter

创建空数组,$myArray = array();.然后循环查询结果,$your_query->posts 并获取每个id的字段值,并将结果和id添加到$myArray.

然后对数组进行排序$myArray 按价格计算。

然后做一个循环$myArray 输出每个帖子id所需的显示。

相关推荐

Meta_Query Order By Date Present->Future Then Show NULL

感谢您抽出时间阅读本文。我一直在为我正在处理的一个事件网站的meta\\u查询而苦苦挣扎。我使用ACF为日期开始和日期结束创建了一个字段,但并非所有事件都有日期。我想实现的是,当你转到归档或税务视图时,你看到的第一件事是指定了日期的帖子,按照从今天到未来的顺序排列。然后在输出这些日期事件之后,循环遍历所有空的日期帖子。到目前为止,我的职能如下。php文件。这种方法很有效,但顺序不对。因此,以正确的顺序输出日期正确的事件。但只有在空值项具有输出之后。我认为这可能是因为数组本身的排序,所以将日期排序数组移到了