Tengo mi código personalizado para mostrar los precios de los productos en la página de la tienda. Todo funciona bien, cuando configuré wp query para mostrar productos destacados. Si quiero mostrar todos los productos, hay un error de php y no puedo cargar la página de la tienda. Cuando comento “$producto_variaciones = $producto->get_disponible_variaciones();” línea, es posible cargar la página de la tienda, pero hay un problema al mostrar los precios en productos variables.
Estoy usando el generador de oxígeno y el módulo de lista de productos en él.
elseif($product->is_type('variable')) {
#1 Get product varations
$product_variations = $product->get_available_variations();
#2 Get one variation id of a product
$variation_product_id = $product_variations [0]['variation_id'];
#3 Create the product object
$variation_product = new WC_Product_Variation( $variation_product_id );
$variation_product_price = number_format($variation_product ->regular_price, '0', ',', ' ');
$variation_prodct_sale_price = number_format($variation_product ->sale_price, '0', ',', ' ');
$variable_price = number_format($product->get_price(), '0', ',', ' ');
if ($akcni_cena && $akcni_nabidka_on && $end_time > $today_time) {
if( $product->is_on_sale() ) {
/* Přeškrtnutá zlevněná cena */
echo '<div> <span class="regprice strikethrough">' . $variation_product_price . ' ' . $symbol . '</span> <br> <span class="actual_price">' . $variation_prodct_sale_price . ' ' . $symbol . '</span></div>';
} else {
/* Přeškrtnutá normální cena */
echo '<div> <span class="regprice strikethrough">' . $variation_product_price . ' ' . $symbol . '</span></div>';
}
/* Akční cena */
echo '<div class="actual_price">' . $akcni_cena . ' ' . $symbol . /*'<span class="vat actual_price"> s DPH</span>'.*/ '</div>' ;
}else {
if( $product->is_on_sale() ) {
/* Zlevněná cena */
echo '<div> <span class="regprice strikethrough">' . $variation_product_price . ' ' . $symbol . '</span> <br> <span class="actual_price">' . $variation_prodct_sale_price . ' ' . $symbol . '</span></div>';
} else {
/* Normální cena */
echo '<div> <span class="actual_price">' . $variation_product_price . ' ' . $symbol . '</span></div>';
}
}
}
Aquí está el código completo:
add_filter('woocommerce_get_price_html', 'libielektro_akcni_nabidka_product_list_price', 9999);
function libielektro_akcni_nabidka_product_list_price () {
global $product;
$product_id = $product->get_id();
$symbol = get_woocommerce_currency_symbol();
$akcni_cena = number_format(wmc_get_price(get_field('akcni_cena', $product_id)), '0', ',', ' ');
$price_excl_tax = number_format(wc_get_price_excluding_tax( $product ), '0', ',', ' '); // price without VAT
$price_incl_tax = number_format(wc_get_price_including_tax( $product ), '0', ',', ' '); // price with VAT
$regular_price = number_format($product->get_regular_price(), '0', ',', ' ');
$sale_price = number_format($product->get_sale_price(), '0', ',', ' ');
$akcni_nabidka = get_field('akcni_nabidka', $product_id);
$akcni_nabidka_on = $akcni_nabidka == true;
$today = date("Y-m-d H:i:s");
$today_time = strtotime($today);
$end_time = strtotime(get_field('ukonceni_akcni_nabidky', $product_id));
if( $product->is_type('simple') || $product->is_type('external') || $product->is_type('grouped') ) {
if ($akcni_cena && $akcni_nabidka_on && $end_time > $today_time) {
if( $product->is_on_sale() ) {
/* Přeškrtnutá zlevněná cena */
echo '<div class="strikethrough"> <span class="regprice">' . $regular_price . $symbol . '</span> <span>' . $price_incl_tax . ' ' . $symbol . '<span class="vat"> s DPH</span> </span class="price-without-vat">' .
$price_excl_tax . ' ' . $symbol . '</span> <span class="vat">bez DPH</span> </div>';
} else {
/* Přeškrtnutá normální cena */
echo '<div class="strikethrough"> </span>' . $price_incl_tax . ' ' . $symbol . ' <span class="vat">s DPH</span> <br> <span class="price-without-vat">' .
$price_excl_tax . ' ' . $symbol . '</span> <span class="vat">bez DPH</span> </div>';
}
/* Akční cena */
echo '<div class="actual_price">' . $akcni_cena . ' ' . $symbol . '<span class="vat actual_price"> s DPH</span> </div>' ;
} else {
if( $product->is_on_sale() ) {
/* Zlevněná cena */
echo '<div><span class="regprice strikethrough">' . $regular_price . ' ' . $symbol . '<span class="vat"> s DPH</span> </span> <br> <span class="actual_price">' . $price_incl_tax . ' ' . $symbol . '</span> <span class="vat actual_price">s DPH</span> <br> <span class="actual_price price-without-vat">' .
$price_excl_tax . ' ' . $symbol . '</span> <span class="vat actual_price">bez DPH</span></div>';
} else {
/* Normální cena */
echo '<div><span class="actual_price">' . $price_incl_tax . ' ' . $symbol . '</span> <span class="vat actual_price">s DPH</span> <br> <span class="actual_price price-without-vat">' .
$price_excl_tax . ' ' . $symbol . '</span> <span class="vat actual_price">bez DPH</span> </div>';
}
}
/* Akční nabídka cena v shop page - variable product */
}elseif($product->is_type('variable')) {
#1 Get product varations
$product_variations = $product->get_available_variations();
#2 Get one variation id of a product
$variation_product_id = $product_variations [0]['variation_id'];
#3 Create the product object
$variation_product = new WC_Product_Variation( $variation_product_id );
$variation_product_price = number_format($variation_product ->regular_price, '0', ',', ' ');
$variation_prodct_sale_price = number_format($variation_product ->sale_price, '0', ',', ' ');
$variable_price = number_format($product->get_price(), '0', ',', ' ');
if ($akcni_cena && $akcni_nabidka_on && $end_time > $today_time) {
if( $product->is_on_sale() ) {
/* Přeškrtnutá zlevněná cena */
echo '<div> <span class="regprice strikethrough">' . $variation_product_price . ' ' . $symbol . '</span> <br> <span class="actual_price">' . $variation_prodct_sale_price . ' ' . $symbol . '</span></div>';
} else {
/* Přeškrtnutá normální cena */
echo '<div> <span class="regprice strikethrough">' . $variation_product_price . ' ' . $symbol . '</span></div>';
}
/* Akční cena */
echo '<div class="actual_price">' . $akcni_cena . ' ' . $symbol . /*'<span class="vat actual_price"> s DPH</span>'.*/ '</div>' ;
}else {
if( $product->is_on_sale() ) {
/* Zlevněná cena */
echo '<div> <span class="regprice strikethrough">' . $variation_product_price . ' ' . $symbol . '</span> <br> <span class="actual_price">' . $variation_prodct_sale_price . ' ' . $symbol . '</span></div>';
} else {
/* Normální cena */
echo '<div> <span class="actual_price">' . $variation_product_price . ' ' . $symbol . '</span></div>';
}
}
}
}
.