wordpress - WooCommerce Filtering by Custom Attribute (Grouped.php) -
grouped.php in woocommerce creates table , foreach loop runs through each product fill out table products. (code included below)
i add filter grouped.php file (below) show products custom attribute of [contract-type="paym"] products attribute displayed in table when page loads - not want user have control on there no need add filtering options on client side.
any information appreciated on how can make loop execute products containing attribute.
i thinking simple if statement not know handles woocommerce uses identify attributes.
here code in grouped.php file..
<?php /** * grouped product add cart * * @author woothemes * @package woocommerce/templates * @version 2.1.7 */ if ( ! defined( 'abspath' ) ) { exit; // exit if accessed directly } global $product, $post; $parent_product_post = $post; do_action( 'woocommerce_before_add_to_cart_form' ); ?> <form class="cart" method="post" enctype='multipart/form-data'> <table cellspacing="0" class="group_table"> <tbody> <?php foreach ( $grouped_products $product_id ) : $product = wc_get_product( $product_id ); if ( 'yes' === get_option( 'woocommerce_hide_out_of_stock_items' ) && ! $product->is_in_stock() ) { continue; } $post = $product->post; setup_postdata( $post ); ?> <tr> <td> <?php if ( $product->is_sold_individually() || ! $product->is_purchasable() ) : ?> <?php woocommerce_template_loop_add_to_cart(); ?> <?php else : ?> <?php $quantites_required = true; woocommerce_quantity_input( array( 'input_name' => 'quantity[' . $product_id . ']', 'input_value' => '0', 'min_value' => apply_filters( 'woocommerce_quantity_input_min', 0, $product ), 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->backorders_allowed() ? '' : $product->get_stock_quantity(), $product ) ) ); ?> <?php endif; ?> </td> <td class="label"> <label for="product-<?php echo $product_id; ?>"> <?php echo $product->is_visible() ? '<a href="' . esc_url( apply_filters( 'woocommerce_grouped_product_list_link', get_permalink(), $product_id ) ) . '">' . esc_html( get_the_title() ) . '</a>' : esc_html( get_the_title() ); ?> </label> </td> <?php do_action ( 'woocommerce_grouped_product_list_before_price', $product ); ?> <td class="price"> <?php echo $product->get_price_html(); if ( $availability = $product->get_availability() ) { $availability_html = empty( $availability['availability'] ) ? '' : '<p class="stock ' . esc_attr( $availability['class'] ) . '">' . esc_html( $availability['availability'] ) . '</p>'; echo apply_filters( 'woocommerce_stock_html', $availability_html, $availability['availability'], $product ); } ?> </td> </tr> <?php endforeach; // reset parent grouped product $post = $parent_product_post; $product = wc_get_product( $parent_product_post->id ); setup_postdata( $parent_product_post ); ?> </tbody> </table> <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $product->id ); ?>" /> <?php if ( $quantites_required ) : ?> <?php do_action( 'woocommerce_before_add_to_cart_button' ); ?> <button type="submit" class="single_add_to_cart_button button alt"><?php echo $product->single_add_to_cart_text(); ?></button> <?php do_action( 'woocommerce_after_add_to_cart_button' ); ?> <?php endif; ?> </form> <?php do_action( 'woocommerce_after_add_to_cart_form' ); ?>
once $product
defined, can grab single custom product attribute
$product->get_attribute('attribute')
.
in example, adding simple if statement should work:
foreach ( $grouped_products $product_id ) : $product = wc_get_product( $product_id ); if ($product->get_attribute( 'contract-type' ) !== 'paym') { continue; }
Comments
Post a Comment