Woocommerce 相关产品 - 在价格区间显示产品

Woocommerce Related Products - show products in price interval

我正在尝试修改 related.php 以便随机显示商店中价格在 plus/minus 100 范围内的任意 3 件产品。

我正在使用 ACF 字段和 Woocommerce 3.2。 问题是虽然选择了正确的产品,但没有显示它们的价格。相反,所有 3 种产品都显示参考产品的价格。

这是代码(price_obj 是价格的 ACF 字段):

global $product, $woocommerce_loop;

$product = new WC_Product(get_the_ID());

$price_product = get_field('price_obj',get_the_ID());


$args1=array(
    'post_type'         => 'product',
    'posts_per_page'    => -1,
    'post__not_in'      => array( $product->get_id() )
);

$products_in_range = array();

$my_query = new wp_query($args1);


if( $my_query->have_posts() ) {
    $val = count($my_query->get_posts());
    while ($my_query->have_posts()) {
        $my_query->the_post();
        $featured_image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'large');

        $price = get_field('price_obj');
        $id = get_the_ID();

        if ((($price_product-100) <= $price) && ($price <= ($price_product+100))){
            array_push($products_in_range,$id);
        }
    }
}
wp_reset_query();

$rand_products = array_rand($products_in_range, 3);

?>

<?php if ($rand_products){ ?>
<div class="related products">

    <h2><?php _e( 'Related Products', 'woocommerce' ); ?></h2>

    <ul class="products">
        <?php
            foreach ($rand_products as $prod){
                $title = get_the_title($products_in_range[$prod]);
                $featured_image = wp_get_attachment_image_src( get_post_thumbnail_id($products_in_range[$prod]), 'large');
                $link = get_permalink($products_in_range[$prod]);
                $product_prod = new WC_Product($products_in_range[$prod]);
                $price = wc_price($product->get_price());
        ?>
        <li class="product type-product status-publish has-post-thumbnail first instock shipping-taxable purchasable product-type-simple">
            <a href="<?php echo $link; ?>" class="woocommerce-LoopProduct-link">
                <span class="et_shop_image">
                    <img width="400" height="400"
                        src="<?php echo $featured_image[0]; ?>"
                        class="attachment-shop_catalog size-shop_catalog wp-post-image"
                        alt=""
                        title="">
                    <span class="et_overlay"></span>
                </span>
                <h3><?php echo $title; ?></h3>
                <span class="price">
                    <span class="woocommerce-Price-amount amount">
                        <?php echo $price; ?>
                    </span>
                </span>
            </a>
        </li>
        <?php } ?>

    </ul>

</div>

非常感谢您的帮助!

get_field() 可以带三个参数。第一个是强制性的,但最后两个是可选的。

get_field($selector, [$post_id], [$format_value]);

其中 $selector 是 field.The 的名称 $post_id 是不言自明的, 但默认为当前 post$format_value 决定您是否要应用格式化逻辑。

因为您是通过 get_field('price_obj') 调用函数并省略了 post 的 ID,所以在这种情况下它默认为当前 post post 的主要项目。

这是错误的,因为您在 WordPress 循环中正确的对象被保存到 $price

正如您在下面提到的,当您通过

访问对象时

$price = wc_price($product->get_price());

您正在访问 $product 对象,这是主要项目。但是您的子产品存储在 $product_prod 中,因此要访问它的价格,您必须将代码更改为

$price = wc_price($product_prod->get_price());