0

I'm working on a child theme where I want to split variable product into 2 elements:

  1. Regular variation form with a dropdown where customer gets to pick from a single attribute with multiple terms except for one.
  2. A single form with just one specific term and its own add to cart button.

For example: When selling clothes we create "tshirts" attribute and use terms to describe both the ones that have prints on them (print 1, print 2, print3 etc.) as well as a regular, plain tshirt (which has a special "plain-shirt" term) and unlike others - doesn't appear in the dropdown but is a standalone element.

Attached image

I've tried looking into different solutions and eventually settled down on editing variable.php themplate, duplicating the variations_form and using code from this thread: Hide specific product attribute terms on WooCommerce variable product dropdown to filter out necessary terms. However, since 'wc_dropdown_variation_attribute_options' fucntion and hooks are already inside the form I'm struggling with how should I go about this. It is probably an extremely wonky approach in my case so any help, ideas and suggestions will be greatly appreciated.

Edit: Found a working soultion by further editing variable.php template:

For the first form I added a filter before "woocommerce_before_variations_form" hook:

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'sample_dropdown', 10, 1 );
    function sample_dropdown( $args ) {
        $taxonomy = 'pa_capacity';
        $targeted_terms_names = array( "plain-shirt", "plain-tshirt" );
        $terms_slugs = array_filter( array_map( 'sanitize_title', $targeted_terms_names ) );
        if( $args['attribute'] === $taxonomy ) {
            foreach( $args['options'] as $key => $option ){
                if( ! in_array( $option , $terms_slugs ) ) {
                    unset($args['options'][$key]);
                }
            }  
        }
        return $args;
    }

and removed filer on "woocommerce_after_variations_form" hook.

Then for the second form I applied another filter with reversed array

if( in_array( $option , $terms_slugs )

Instead of

if( ! in_array( $option , $terms_slugs ) )

Its' still very untidy but at least it works.

LchGr
  • 1
  • 3

0 Answers0