Merge pull request #17476 from woocommerce/pr/17111
Grouped products; allow custom columns and changes to values
This commit is contained in:
commit
77d4d9a37c
|
@ -13,8 +13,9 @@
|
||||||
* @see https://docs.woocommerce.com/document/template-structure/
|
* @see https://docs.woocommerce.com/document/template-structure/
|
||||||
* @author WooThemes
|
* @author WooThemes
|
||||||
* @package WooCommerce/Templates
|
* @package WooCommerce/Templates
|
||||||
* @version 3.0.7
|
* @version 3.3.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( ! defined( 'ABSPATH' ) ) {
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
@ -24,64 +25,73 @@ global $product, $post;
|
||||||
do_action( 'woocommerce_before_add_to_cart_form' ); ?>
|
do_action( 'woocommerce_before_add_to_cart_form' ); ?>
|
||||||
|
|
||||||
<form class="cart" action="<?php echo esc_url( get_permalink() ); ?>" method="post" enctype='multipart/form-data'>
|
<form class="cart" action="<?php echo esc_url( get_permalink() ); ?>" method="post" enctype='multipart/form-data'>
|
||||||
<table cellspacing="0" class="group_table">
|
<table cellspacing="0" class="woocommerce-grouped-product-list group_table">
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
$quantites_required = false;
|
$quantites_required = false;
|
||||||
$previous_post = $post;
|
$previous_post = $post;
|
||||||
|
$grouped_product_columns = apply_filters( 'woocommerce_grouped_product_columns', array(
|
||||||
|
'quantity',
|
||||||
|
'label',
|
||||||
|
'price',
|
||||||
|
), $product );
|
||||||
|
|
||||||
foreach ( $grouped_products as $grouped_product ) {
|
foreach ( $grouped_products as $grouped_product ) {
|
||||||
$post_object = get_post( $grouped_product->get_id() );
|
$post_object = get_post( $grouped_product->get_id() );
|
||||||
$quantites_required = $quantites_required || ( $grouped_product->is_purchasable() && ! $grouped_product->has_options() );
|
$quantites_required = $quantites_required || ( $grouped_product->is_purchasable() && ! $grouped_product->has_options() );
|
||||||
|
|
||||||
setup_postdata( $post = $post_object );
|
setup_postdata( $post = $post_object ); // WPCS: override ok.
|
||||||
?>
|
|
||||||
<tr id="product-<?php the_ID(); ?>" <?php post_class(); ?>>
|
|
||||||
<td>
|
|
||||||
<?php if ( ! $grouped_product->is_purchasable() || $grouped_product->has_options() ) : ?>
|
|
||||||
<?php woocommerce_template_loop_add_to_cart(); ?>
|
|
||||||
|
|
||||||
<?php elseif ( $grouped_product->is_sold_individually() ) : ?>
|
echo '<tr id="product-' . esc_attr( get_the_ID() ) . '" class="woocommerce-grouped-product-list-item ' . esc_attr( implode( ' ', get_post_class() ) ) . '">';
|
||||||
<input type="checkbox" name="<?php echo esc_attr( 'quantity[' . $grouped_product->get_id() . ']' ); ?>" value="1" class="wc-grouped-product-add-to-cart-checkbox" />
|
|
||||||
|
|
||||||
<?php else : ?>
|
// Output columns for each product.
|
||||||
<?php
|
foreach ( $grouped_product_columns as $column_id ) {
|
||||||
/**
|
do_action( 'woocommerce_grouped_product_list_before_' . $column_id, $grouped_product );
|
||||||
* @since 3.0.0.
|
|
||||||
*/
|
|
||||||
do_action( 'woocommerce_before_add_to_cart_quantity' );
|
|
||||||
|
|
||||||
woocommerce_quantity_input( array(
|
switch ( $column_id ) {
|
||||||
'input_name' => 'quantity[' . $grouped_product->get_id() . ']',
|
case 'quantity' :
|
||||||
'input_value' => isset( $_POST['quantity'][ $grouped_product->get_id() ] ) ? wc_stock_amount( $_POST['quantity'][ $grouped_product->get_id() ] ) : 0,
|
ob_start();
|
||||||
'min_value' => apply_filters( 'woocommerce_quantity_input_min', 0, $grouped_product ),
|
|
||||||
'max_value' => apply_filters( 'woocommerce_quantity_input_max', $grouped_product->get_max_purchase_quantity(), $grouped_product ),
|
|
||||||
) );
|
|
||||||
|
|
||||||
/**
|
if ( ! $grouped_product->is_purchasable() || $grouped_product->has_options() ) {
|
||||||
* @since 3.0.0.
|
woocommerce_template_loop_add_to_cart();
|
||||||
*/
|
} elseif ( $grouped_product->is_sold_individually() ) {
|
||||||
do_action( 'woocommerce_after_add_to_cart_quantity' );
|
echo '<input type="checkbox" name="' . esc_attr( 'quantity[' . $grouped_product->get_id() . ']' ) . '" value="1" class="wc-grouped-product-add-to-cart-checkbox" />';
|
||||||
?>
|
} else {
|
||||||
<?php endif; ?>
|
do_action( 'woocommerce_before_add_to_cart_quantity' );
|
||||||
</td>
|
|
||||||
<td class="label">
|
woocommerce_quantity_input( array(
|
||||||
<label for="product-<?php echo $grouped_product->get_id(); ?>">
|
'input_name' => 'quantity[' . $grouped_product->get_id() . ']',
|
||||||
<?php echo $grouped_product->is_visible() ? '<a href="' . esc_url( apply_filters( 'woocommerce_grouped_product_list_link', get_permalink( $grouped_product->get_id() ), $grouped_product->get_id() ) ) . '">' . $grouped_product->get_name() . '</a>' : $grouped_product->get_name(); ?>
|
'input_value' => isset( $_POST['quantity'][ $grouped_product->get_id() ] ) ? wc_stock_amount( wc_clean( wp_unslash( $_POST['quantity'][ $grouped_product->get_id() ] ) ) ) : 0, // WPCS: CSRF ok, input var okay, sanitization ok.
|
||||||
</label>
|
'min_value' => apply_filters( 'woocommerce_quantity_input_min', 0, $grouped_product ),
|
||||||
</td>
|
'max_value' => apply_filters( 'woocommerce_quantity_input_max', $grouped_product->get_max_purchase_quantity(), $grouped_product ),
|
||||||
<?php do_action( 'woocommerce_grouped_product_list_before_price', $grouped_product ); ?>
|
) );
|
||||||
<td class="price">
|
|
||||||
<?php
|
do_action( 'woocommerce_after_add_to_cart_quantity' );
|
||||||
echo $grouped_product->get_price_html();
|
}
|
||||||
echo wc_get_stock_html( $grouped_product );
|
|
||||||
?>
|
$value = ob_get_clean();
|
||||||
</td>
|
break;
|
||||||
</tr>
|
case 'label' :
|
||||||
<?php
|
$value = '<label for="product-' . esc_attr( $grouped_product->get_id() ) . '">';
|
||||||
|
$value .= $grouped_product->is_visible() ? '<a href="' . esc_url( apply_filters( 'woocommerce_grouped_product_list_link', get_permalink( $grouped_product->get_id() ), $grouped_product->get_id() ) ) . '">' . $grouped_product->get_name() . '</a>' : $grouped_product->get_name();
|
||||||
|
$value .= '</label>';
|
||||||
|
break;
|
||||||
|
case 'price' :
|
||||||
|
$value = $grouped_product->get_price_html() . wc_get_stock_html( $grouped_product );
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
$value = '';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '<td class="woocommerce-grouped-product-list-item__' . esc_attr( $column_id ) . ' ' . esc_attr( $column_id ) . '">' . apply_filters( 'woocommerce_grouped_product_list_column_' . $column_id, $value, $grouped_product ) . '</td>'; // WPCS: XSS ok.
|
||||||
|
|
||||||
|
do_action( 'woocommerce_grouped_product_list_after_' . $column_id, $grouped_product );
|
||||||
}
|
}
|
||||||
// Return data to original post.
|
|
||||||
setup_postdata( $post = $previous_post );
|
echo '</tr>';
|
||||||
|
}
|
||||||
|
setup_postdata( $post = $previous_post ); // WPCS: override ok.
|
||||||
?>
|
?>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
Loading…
Reference in New Issue