我正在尝试修改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>
非常感谢您的帮助!
答案 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());