Woocommerce: Sæt første produktvariabel som standard variation hvis den ikke indstillet

Du kan sætte et standardafgivelse af dine variationer når du opretter dit produkt i WooCommerce, men hvis du glemmer det så kan det være en god ide at have et fallback.

Dette lille kodestykke er baseret på et WooCommerce-hook. Derfor vil den fungere med ethvert tema såfremt hooket ikke er ekskluderet af temaet. Funktionen sætter den første variabel som default, hvis der ikke er sat en. Funktionen skal tilføjes til functions.php fil i temaet og når funktionen er tilføjet virker den.

Der er flere måder at gemme produktmetadata på, når du gemmer produktet i backend. Siden WooCommerce 3 kan du bruge følgende hook “woocommerce_admin_process_product_object” som funktionen er bundet op på. Funktioen bliver eksekveret når der er tale om et produkt med variant egenskaber og når du klikker “opdater”. Funktionen tjekker så om der er sat en default variation og om der er nogle gyldige produkt variationer før end den ruller. Er der ingen standard variation sat og der er aktive variationer, så vil den opdatere post meta feltet “_default_attributes”, hvilket indeholder den data som gemmer den prevalgte variation. Opdateringen sker i et page load, og du vil med det samme se at der er sat en standard variation, altså hvis der ingen er sat forvejen.


/*--------------------------------------------------------------
Set first variable as default variation if not set
--------------------------------------------------------------*/
add_action('woocommerce_before_variations_form', 'default_variation_value_if_empty');
function default_variation_value_if_empty() {
	if (!$product->is_type( 'variable' )) return false; 
		$product_variations = $product->get_available_variations();
	if (empty($product_variations) || !empty($product->get_default_attributes())) return false;
	$product_variations = $product->get_available_variations();
	$attributes = (array_column($product_variations, 'attributes')[0]);
	$label = explode('_',array_key_first($attributes))[1]; // Matcher label navn
	$new_default[$label] = sanitize_key(current($attributes));
 update_post_meta($product->get_id(), '_default_attributes', $new_default);
}