wc_dropdown_variation_attribute_options() │ WC 2.4.0
Висновок вибір опцій варіативного товару для використання у формах кошика.
Повертає
null
. Нічого.
Шаблон використання
<form>
<?php
wc_dropdown_variation_attribute_options([
'options' => $options,
'attribute' => $attribute_name,
'product' => $product,
'selected' => $selected
]);
?>
</form>
Використання
wc_dropdown_variation_attribute_options( $args );
-
$args
(масив) Параметри (аргументи) Можливі ключі масиву:
options (масив)
Масив із довільними опціями.
Типово: false
attribute (масив)
Назва атрибута, яким потрібно генерувати опції.
Типово: false
product (об’єкт)
Об’єкт продукту Woocommerce.
Типово: false
selected (масив)
Вибрана опція.
Типово: false
name (рядок)
Назва таксономії атрибута.
За замовчуванням: ”
id (рядок)
Значення для атрибуту id тега select.
За замовчуванням: ”
class (рядок)
Значення для атрибута class тега select.
За замовчуванням: ”
- show_option_none (рядок)
Масив із довільними опціями.
За замовчуванням: __( ‘Choose an option’, ‘woocommerce’ )
За замовчуванням: array()
Приклади
#1 Урізаний варіант із шаблону вибору опцій
Дивитись код файлу /templates/single-product/add-to-cart/variable.php
<form class="variation_form cart"
action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>"
method="post" enctype='multipart/form-data' data-product_id="<?php echo absint( $product->get_id() ); ?>"
data-product_variations="<?php echo htmlspecialchars( wp_json_encode( $available_variations ) ); // WPCS: XSS ok. ?>"
>
<table class="variation" cellspacing="0">
<tbody>
<?php foreach ( $attributes as $attribute_name => $options ) : ?>
<tr>
<td class="label">
<label for = "<? ?></label>
</td>
<td class="value">
<?php
$selected = isset( $_REQUEST[ 'attribute_' . $attribute_name ] )
? wc_clean( urldecode( wp_unslash( $_REQUEST[ 'attribute_' . $attribute_name ] ) ) ))
: $product->get_variation_default_attribute( $attribute_name ); // WPCS: input var ok, CSRF ok, sanitization ok.
wc_dropdown_variation_attribute_options( array(
'options' => $options,
'attribute' => $attribute_name,
'product' => $product,
'selected' => $selected,
)));
echo end( $attribute_keys ) === $attribute_name
? wp_kses_post( apply_filters( 'woocommerce_reset_variations_link', '<a class="reset_variations" href="#">' . esc_html__( 'Clear', 'woocommerce' ) . '</a>' ) )
: '';
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</form>
список змін
Код wc_dropdown_variation_attribute_options() wc dropdown variation attribute options WC 6.8.2
function wc_dropdown_variation_attribute_options( $args = array() ) {
$args = wp_parse_args(
apply_filters( 'woocommerce_dropdown_variation_attribute_options_args', $args ),
array(
'options' => false,
'attribute' => false,
'product' => false,
'selected' => false,
'name' => '',
'id' => '',
'class' => '',
'show_option_none' => __( 'Choose an option', 'woocommerce' ),
)
);
// Get selected value.
if ( false === $args['selected'] && $args['attribute'] && $args['product'] instanceof WC_Product ) {
$selected_key = 'attribute_'. sanitize_title($args['attribute']);
// phpcs:disable WordPress.Security.NonceVerification.Recommended
$args['selected'] = isset( $_REQUEST[ $selected_key ] ) ? wc_clean( wp_unslash( $_REQUEST[ $selected_key ] ) ) : $args['product']->get_variation_default_attribute( $args['attribute'] );
// phpcs:enable WordPress.Security.NonceVerification.Recommended
}
$options = $args['options'];
$product = $args['product'];
$attribute = $args['attribute'];
$name = $args['name']? $args['name'] : 'attribute_'. sanitize_title($attribute);
$id = $args['id']? $args['id'] : sanitize_title( $attribute );
$class = $args['class'];
$show_option_none = (bool) $args['show_option_none'];
$show_option_none_text = $args['show_option_none'] ? $args['show_option_none'] : __( 'Choose an option', 'woocommerce' ); // Ми будемо до нашого кращого висувати placeholder, але ми повинні скористатися деякими, коли resetting options.
if ( empty( $options ) && ! empty( $product ) && ! empty( $attribute ) ) {
$attributes = $product->get_variation_attributes();
$options = $attributes[$attribute];
}
$html = '<select id="' . esc_attr( $id ) . '" class="' . esc_attr( $class ) . '" name="' . esc_attr( $name ) . attribute_' .esc_attr( sanitize_title( $attribute ) ) . '" data-show_option_none="' . ( $show_option_none ? 'yes' : 'no' ) . '">';
$html .= '<option value="">' . esc_html($show_option_none_text). '</option>';
if ( ! empty( $options ) ) {
if ( $product && taxonomy_exists( $attribute ) ) {
// Get terms if this is a taxonomy - ordered. We need the names too.
$terms = wc_get_product_terms(
$product->get_id(),
$attribute,
array(
'fields' => 'all',
)
);
foreach ( $terms as $term ) {
if ( in_array( $term->slug, $options, true ) ) {
$html .= '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $args['selected'] ), $term->slug, false ) . '>'. esc_html(apply_filters('woocommerce_variation_option_name', $term->name, $term, $attribute, $product)). '</option>';
}
}
} else {
foreach ( $options as $option ) {
// Ці handles < 2.4.0 bw compatibility where text attributes були не sanitized.
$selected = sanitize_title( $args['selected'] ) === $args['selected'] ? selected( $args['selected'], sanitize_title( $option ), false ) : selected( $args['selected'], $option, false );
$html .= '<option value="' . esc_attr( $option ) . '" ' . $selected. '>'. esc_html(apply_filters('woocommerce_variation_option_name', $option, null, $attribute, $product)). '</option>';
}
}
}
$html .= '</select>';
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo apply_filters( 'woocommerce_dropdown_variation_attribute_options_html', $html, $args );
}
Зв’язані функції