Merge pull request #18017 from woocommerce/tweak/decouple-cart-template-methods
Decouple cart templating methods from WC_Cart class
This commit is contained in:
commit
75ecb887c3
|
@ -819,69 +819,9 @@ class WC_Cart extends WC_Legacy_Cart {
|
|||
* @return string
|
||||
*/
|
||||
public function get_item_data( $cart_item, $flat = false ) {
|
||||
$item_data = array();
|
||||
wc_deprecated_function( 'WC_Cart::get_item_data', '3.3', 'wc_get_formatted_cart_item_data' );
|
||||
|
||||
// Variation values are shown only if they are not found in the title as of 3.0.
|
||||
// This is because variation titles display the attributes.
|
||||
if ( $cart_item['data']->is_type( 'variation' ) && is_array( $cart_item['variation'] ) ) {
|
||||
foreach ( $cart_item['variation'] as $name => $value ) {
|
||||
$taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_pa_', '', urldecode( $name ) ) );
|
||||
|
||||
if ( taxonomy_exists( $taxonomy ) ) {
|
||||
// If this is a term slug, get the term's nice name.
|
||||
$term = get_term_by( 'slug', $value, $taxonomy );
|
||||
if ( ! is_wp_error( $term ) && $term && $term->name ) {
|
||||
$value = $term->name;
|
||||
}
|
||||
$label = wc_attribute_label( $taxonomy );
|
||||
} else {
|
||||
// If this is a custom option slug, get the options name.
|
||||
$value = apply_filters( 'woocommerce_variation_option_name', $value );
|
||||
$label = wc_attribute_label( str_replace( 'attribute_', '', $name ), $cart_item['data'] );
|
||||
}
|
||||
|
||||
// Check the nicename against the title.
|
||||
if ( '' === $value || wc_is_attribute_in_product_name( $value, $cart_item['data']->get_name() ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$item_data[] = array(
|
||||
'key' => $label,
|
||||
'value' => $value,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Filter item data to allow 3rd parties to add more to the array.
|
||||
$item_data = apply_filters( 'woocommerce_get_item_data', $item_data, $cart_item );
|
||||
|
||||
// Format item data ready to display.
|
||||
foreach ( $item_data as $key => $data ) {
|
||||
// Set hidden to true to not display meta on cart.
|
||||
if ( ! empty( $data['hidden'] ) ) {
|
||||
unset( $item_data[ $key ] );
|
||||
continue;
|
||||
}
|
||||
$item_data[ $key ]['key'] = ! empty( $data['key'] ) ? $data['key'] : $data['name'];
|
||||
$item_data[ $key ]['display'] = ! empty( $data['display'] ) ? $data['display'] : $data['value'];
|
||||
}
|
||||
|
||||
// Output flat or in list format.
|
||||
if ( count( $item_data ) > 0 ) {
|
||||
ob_start();
|
||||
|
||||
if ( $flat ) {
|
||||
foreach ( $item_data as $data ) {
|
||||
echo esc_html( $data['key'] ) . ': ' . wp_kses_post( $data['display'] ) . "\n";
|
||||
}
|
||||
} else {
|
||||
wc_get_template( 'cart/cart-item-data.php', array( 'item_data' => $item_data ) );
|
||||
}
|
||||
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
return '';
|
||||
return wc_get_formatted_cart_item_data( $cart_item, $flat );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -911,8 +851,9 @@ class WC_Cart extends WC_Legacy_Cart {
|
|||
* @return string url to page
|
||||
*/
|
||||
public function get_remove_url( $cart_item_key ) {
|
||||
$cart_page_url = wc_get_page_permalink( 'cart' );
|
||||
return apply_filters( 'woocommerce_get_remove_url', $cart_page_url ? wp_nonce_url( add_query_arg( 'remove_item', $cart_item_key, $cart_page_url ), 'woocommerce-cart' ) : '' );
|
||||
wc_deprecated_function( 'WC_Cart::get_remove_url', '3.3', 'wc_get_cart_remove_url' );
|
||||
|
||||
return wc_get_cart_remove_url( $cart_item_key );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -922,13 +863,9 @@ class WC_Cart extends WC_Legacy_Cart {
|
|||
* @return string url to page
|
||||
*/
|
||||
public function get_undo_url( $cart_item_key ) {
|
||||
$cart_page_url = wc_get_page_permalink( 'cart' );
|
||||
wc_deprecated_function( 'WC_Cart::get_undo_url', '3.3', 'wc_get_cart_undo_url' );
|
||||
|
||||
$query_args = array(
|
||||
'undo_item' => $cart_item_key,
|
||||
);
|
||||
|
||||
return apply_filters( 'woocommerce_get_undo_url', $cart_page_url ? wp_nonce_url( add_query_arg( $query_args, $cart_page_url ), 'woocommerce-cart' ) : '', $cart_item_key );
|
||||
return wc_get_cart_undo_url( $cart_item_key );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -494,7 +494,7 @@ class WC_Form_Handler {
|
|||
// Don't show undo link if removed item is out of stock.
|
||||
if ( $product->is_in_stock() && $product->has_enough_stock( $cart_item['quantity'] ) ) {
|
||||
$removed_notice = sprintf( __( '%s removed.', 'woocommerce' ), $item_removed_title );
|
||||
$removed_notice .= ' <a href="' . esc_url( WC()->cart->get_undo_url( $cart_item_key ) ) . '" class="restore-item">' . __( 'Undo?', 'woocommerce' ) . '</a>';
|
||||
$removed_notice .= ' <a href="' . esc_url( wc_get_cart_undo_url( $cart_item_key ) ) . '" class="restore-item">' . __( 'Undo?', 'woocommerce' ) . '</a>';
|
||||
} else {
|
||||
$removed_notice = sprintf( __( '%s removed.', 'woocommerce' ), $item_removed_title );
|
||||
}
|
||||
|
|
|
@ -960,7 +960,8 @@ if ( ! function_exists( 'woocommerce_catalog_ordering' ) ) {
|
|||
if ( ! function_exists( 'woocommerce_pagination' ) ) {
|
||||
|
||||
/**
|
||||
* Output the pagination. */
|
||||
* Output the pagination.
|
||||
*/
|
||||
function woocommerce_pagination() {
|
||||
if ( ! wc_get_loop_prop( 'is_paginated' ) || ! woocommerce_products_will_display() ) {
|
||||
return;
|
||||
|
@ -2698,6 +2699,109 @@ function wc_get_theme_slug_for_templates() {
|
|||
return apply_filters( 'woocommerce_theme_slug_for_templates', get_option( 'template' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets and formats a list of cart item data + variations for display on the frontend.
|
||||
*
|
||||
* @since 3.3.0
|
||||
* @param array $cart_item Cart item object.
|
||||
* @param bool $flat Should the data be returned flat or in a list.
|
||||
* @return string
|
||||
*/
|
||||
function wc_get_formatted_cart_item_data( $cart_item, $flat = false ) {
|
||||
$item_data = array();
|
||||
|
||||
// Variation values are shown only if they are not found in the title as of 3.0.
|
||||
// This is because variation titles display the attributes.
|
||||
if ( $cart_item['data']->is_type( 'variation' ) && is_array( $cart_item['variation'] ) ) {
|
||||
foreach ( $cart_item['variation'] as $name => $value ) {
|
||||
$taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_pa_', '', urldecode( $name ) ) );
|
||||
|
||||
if ( taxonomy_exists( $taxonomy ) ) {
|
||||
// If this is a term slug, get the term's nice name.
|
||||
$term = get_term_by( 'slug', $value, $taxonomy );
|
||||
if ( ! is_wp_error( $term ) && $term && $term->name ) {
|
||||
$value = $term->name;
|
||||
}
|
||||
$label = wc_attribute_label( $taxonomy );
|
||||
} else {
|
||||
// If this is a custom option slug, get the options name.
|
||||
$value = apply_filters( 'woocommerce_variation_option_name', $value );
|
||||
$label = wc_attribute_label( str_replace( 'attribute_', '', $name ), $cart_item['data'] );
|
||||
}
|
||||
|
||||
// Check the nicename against the title.
|
||||
if ( '' === $value || wc_is_attribute_in_product_name( $value, $cart_item['data']->get_name() ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$item_data[] = array(
|
||||
'key' => $label,
|
||||
'value' => $value,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Filter item data to allow 3rd parties to add more to the array.
|
||||
$item_data = apply_filters( 'woocommerce_get_item_data', $item_data, $cart_item );
|
||||
|
||||
// Format item data ready to display.
|
||||
foreach ( $item_data as $key => $data ) {
|
||||
// Set hidden to true to not display meta on cart.
|
||||
if ( ! empty( $data['hidden'] ) ) {
|
||||
unset( $item_data[ $key ] );
|
||||
continue;
|
||||
}
|
||||
$item_data[ $key ]['key'] = ! empty( $data['key'] ) ? $data['key'] : $data['name'];
|
||||
$item_data[ $key ]['display'] = ! empty( $data['display'] ) ? $data['display'] : $data['value'];
|
||||
}
|
||||
|
||||
// Output flat or in list format.
|
||||
if ( count( $item_data ) > 0 ) {
|
||||
ob_start();
|
||||
|
||||
if ( $flat ) {
|
||||
foreach ( $item_data as $data ) {
|
||||
echo esc_html( $data['key'] ) . ': ' . wp_kses_post( $data['display'] ) . "\n";
|
||||
}
|
||||
} else {
|
||||
wc_get_template( 'cart/cart-item-data.php', array( 'item_data' => $item_data ) );
|
||||
}
|
||||
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the url to remove an item from the cart.
|
||||
*
|
||||
* @since 3.3.0
|
||||
* @param string $cart_item_key contains the id of the cart item.
|
||||
* @return string url to page
|
||||
*/
|
||||
function wc_get_cart_remove_url( $cart_item_key ) {
|
||||
$cart_page_url = wc_get_page_permalink( 'cart' );
|
||||
return apply_filters( 'woocommerce_get_remove_url', $cart_page_url ? wp_nonce_url( add_query_arg( 'remove_item', $cart_item_key, $cart_page_url ), 'woocommerce-cart' ) : '' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the url to re-add an item into the cart.
|
||||
*
|
||||
* @since 3.3.0
|
||||
* @param string $cart_item_key Cart item key to undo.
|
||||
* @return string url to page
|
||||
*/
|
||||
function wc_get_cart_undo_url( $cart_item_key ) {
|
||||
$cart_page_url = wc_get_page_permalink( 'cart' );
|
||||
|
||||
$query_args = array(
|
||||
'undo_item' => $cart_item_key,
|
||||
);
|
||||
|
||||
return apply_filters( 'woocommerce_get_undo_url', $cart_page_url ? wp_nonce_url( add_query_arg( $query_args, $cart_page_url ), 'woocommerce-cart' ) : '', $cart_item_key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Products RSS Feed.
|
||||
*
|
||||
|
|
|
@ -56,7 +56,7 @@ do_action( 'woocommerce_before_cart' ); ?>
|
|||
// @codingStandardsIgnoreLine
|
||||
echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf(
|
||||
'<a href="%s" class="remove" aria-label="%s" data-product_id="%s" data-product_sku="%s">×</a>',
|
||||
esc_url( WC()->cart->get_remove_url( $cart_item_key ) ),
|
||||
esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
|
||||
__( 'Remove this item', 'woocommerce' ),
|
||||
esc_attr( $product_id ),
|
||||
esc_attr( $_product->get_sku() )
|
||||
|
@ -82,7 +82,7 @@ do_action( 'woocommerce_before_cart' ); ?>
|
|||
}
|
||||
|
||||
// Meta data.
|
||||
echo WC()->cart->get_item_data( $cart_item );
|
||||
echo wc_get_formatted_cart_item_data( $cart_item );
|
||||
|
||||
// Backorder notification.
|
||||
if ( $_product->backorders_require_notification() && $_product->is_on_backorder( $cart_item['quantity'] ) ) {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* @see https://docs.woocommerce.com/document/template-structure/
|
||||
* @author WooThemes
|
||||
* @package WooCommerce/Templates
|
||||
* @version 3.2.0
|
||||
* @version 3.3.0
|
||||
*/
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
|
@ -43,7 +43,7 @@ do_action( 'woocommerce_before_mini_cart' ); ?>
|
|||
<?php
|
||||
echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf(
|
||||
'<a href="%s" class="remove remove_from_cart_button" aria-label="%s" data-product_id="%s" data-cart_item_key="%s" data-product_sku="%s">×</a>',
|
||||
esc_url( WC()->cart->get_remove_url( $cart_item_key ) ),
|
||||
esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
|
||||
__( 'Remove this item', 'woocommerce' ),
|
||||
esc_attr( $product_id ),
|
||||
esc_attr( $cart_item_key ),
|
||||
|
@ -57,7 +57,7 @@ do_action( 'woocommerce_before_mini_cart' ); ?>
|
|||
<?php echo str_replace( array( 'http:', 'https:' ), '', $thumbnail ) . $product_name . ' '; ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php echo WC()->cart->get_item_data( $cart_item ); ?>
|
||||
<?php echo wc_get_formatted_cart_item_data( $cart_item ); ?>
|
||||
|
||||
<?php echo apply_filters( 'woocommerce_widget_cart_item_quantity', '<span class="quantity">' . sprintf( '%s × %s', $cart_item['quantity'], $product_price ) . '</span>', $cart_item, $cart_item_key ); ?>
|
||||
</li>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
* @see https://docs.woocommerce.com/document/template-structure/
|
||||
* @author WooThemes
|
||||
* @package WooCommerce/Templates
|
||||
* @version 2.3.0
|
||||
* @version 3.3.0
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
|
@ -40,7 +40,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||
<td class="product-name">
|
||||
<?php echo apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . ' '; ?>
|
||||
<?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '× %s', $cart_item['quantity'] ) . '</strong>', $cart_item, $cart_item_key ); ?>
|
||||
<?php echo WC()->cart->get_item_data( $cart_item ); ?>
|
||||
<?php echo wc_get_formatted_cart_item_data( $cart_item ); ?>
|
||||
</td>
|
||||
<td class="product-total">
|
||||
<?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?>
|
||||
|
|
|
@ -616,7 +616,7 @@ class WC_Tests_Cart extends WC_Unit_Test_Case {
|
|||
$cart_item_key = 'test';
|
||||
|
||||
// Do the check
|
||||
$this->assertEquals( apply_filters( 'woocommerce_get_remove_url', $cart_page_url ? wp_nonce_url( add_query_arg( 'remove_item', $cart_item_key, $cart_page_url ), 'woocommerce-cart' ) : '' ), WC()->cart->get_remove_url( $cart_item_key ) );
|
||||
$this->assertEquals( apply_filters( 'woocommerce_get_remove_url', $cart_page_url ? wp_nonce_url( add_query_arg( 'remove_item', $cart_item_key, $cart_page_url ), 'woocommerce-cart' ) : '' ), wc_get_cart_remove_url( $cart_item_key ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue