Woocommerce相关产品 - 以价格间隔显示产品

时间:2017-12-04 18:16:38

标签: woocommerce advanced-custom-fields

我正在尝试修改related.php,以便随机显示商店中任何价格在正负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>

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

$selector是字段的名称。$post_id是自解释的,但默认为当前帖子,而$format_value决定是否你想应用格式化逻辑。

因为您通过get_field('price_obj')调用该函数并省略了您想要的帖子的ID,所以默认为当前帖子,主要项目的帖子。

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

如下所述,当您通过

访问对象时

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

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

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