#php #wordpress #woocommerce #cart #shortcode
#php #wordpress #woocommerce #Корзина #шорткод
Вопрос:
Я пытаюсь отобразить общую сумму пользовательской корзины woocommerce в шорткоде. Код берет общую сумму в корзине, а затем вычитает цену любых товаров в категории «похоронные типы-новые», чтобы отобразить промежуточный итог. Вот код:
add_shortcode( 'quote-total', 'quote_total' );
function quote_total(){
$total = $woocommerce->cart->total;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
if ( has_term( 'funeral-types-new', 'product_cat', $_product->id) ) {
$disbursement = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );
}
}
$subtotal = $total-$disbursement;
echo '<div>'.$subtotal.'</div><div> '.$disbursement.'</div>';
}
$ dispensation отображается нормально, однако $ subtotal отображает 0, поэтому я думаю, что что-то может быть не так с разделом $ subtotal = $ total-$ dispensation;?
Любая помощь очень ценится.
Ответ №1:
В вашем коде много ошибок, таких как:
- в коротком коде отображение никогда не повторяется, но возвращается,
WC_Cart
get_product_price()
метод отображения отформатированной цены товара только для отображения, _ Чтобы проверить категорию товара в элементах корзины, всегда используйте вместо этого $cart_item[‘product_id’]…
Поэтому попробуйте вместо:
add_shortcode( 'quote-total', 'get_quote_total' );
function get_quote_total(){
$total = WC()->cart->total;
$disbursement = 0; // Initializng
// Loop through cart items
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if ( has_term( array('funeral-types-new'), 'product_cat', $cart_item['product_id'] ) ) {
$disbursement = $cart_item['line_total'] $cart_item['line_tax'];
}
}
$subtotal = $total - $disbursement;
return '<div>'.wc_price($subtotal).'</div><div> '.wc_price($disbursement).'</div>';
}
// USAGE: [quote-total]
// or: echo do_shortcode('[quote-total]');
Это должно работать лучше.
Ответ №2:
Вы не думали об использовании
WC()->cart->get_subtotal();