Я смог подумать об этом немного больше. Во-первых, нам нужно придать данным вариации, которые Woo отправляет через JSON, немного больше значения. Я проверяю атрибут «черного» цвета:
if( 'black' === strtolower($variation->get_attribute('color')) ){
Но вы захотите изменить его в соответствии с вашим атрибутом размера.
Далее я определюссылка как
$kia_data['custom_link'] = sprintf( '<a href="google.com">%s</a>', __( 'Your Link', 'your-textdomain' ) );
Это всего лишь ссылка на Google, и вам нужно ее изменить.
Далее мы добавим пустой <div>
заполнитель,И, наконец, мы загружаем несколько сценариев для переменных продуктов и прослушиваем событие found_variation
. Когда мы получаем его, мы получаем variation
из данных JSON, и мы можем проверить custom_link
, который мы определили ранее, и выбросить его в пустой держатель <div>
.
Это, вероятно, ясно как грязь,но вот полный фрагмент кода:
/**
* Add data to json encoded variation form.
*
* @param array $data - this is the variation's json data
* @param object $product
* @param object $variation
* @return array
*/
function kia_available_variation( $data, $product, $variation ){
if( 'black' === strtolower($variation->get_attribute('color')) ){
$kia_data['custom_link'] = sprintf( '<a href="google.com">%s</a>', __( 'Your Link', 'your-textdomain' ) );
} else {
$kia_data['custom_link'] = false;
}
return array_merge( $data, $kia_data );
}
add_filter( 'woocommerce_available_variation', 'kia_available_variation', 10, 3 );
/**
* holder for display link
*/
function kia_custom_varition_link() {
echo '<div class="woocommerce-variation-link"></div>';
}
add_action( 'woocommerce_single_variation', 'kia_custom_varition_link', 5 );
/**
* Add scripts to variable products.
*/
function kia_on_found_template_for_variable_add_to_cart() {
add_action( 'wp_print_footer_scripts', 'kia_variable_footer_scripts' );
}
add_action( 'woocommerce_variable_add_to_cart', 'kia_on_found_template_for_variable_add_to_cart', 30 );
function kia_variable_footer_scripts() {
?>
<script type="text/javascript">
jQuery( document ).ready(function($) {
$('form.cart')
.on('found_variation', function( event, variation ) {
if ( variation.custom_link ) {
$link_html = variation.custom_link;
$(this).find( '.woocommerce-variation-link' ).html( $link_html ).show();
} else {
$(this).find( '.woocommerce-variation-link' ).html('').hide();
}
}).on('reset_variation', function( event, variation ) {
$(this).find( '.woocommerce-variation-link' ).html('').hide();
});
});
</script>
<?php
}
Вот результат: