Я пытаюсь добавить окно списка на странице одного продукта, мне было интересно, нет ли опции для многозадачности в woocommerce, для полей get_option woocommerce, поддерживающих multiselect, но для поддержки post_meta
woocommerce только один выбор, не уверен, есть ли какие-либо ограничения в woocommerce или я могу пропустить что-то, чтобы получить мультиселекцию? Вот приведенный ниже код, который я попробовал
function create_multiselect() { woocommerce_wp_select(array( 'id' => 'newoptions', 'class' => 'newoptions', 'label' => __('Testing Multiple Select', 'woocommerce'), 'options' => array( '1' => 'User1', '2' => 'User2', '3' => 'User3', )) ); } add_action("woocommerce_product_options_pricing","create_multiselect");
Любое предложение было бы здорово.
woocommerce_wp_select()
не поддерживает multiselect, вы можете открыть файл wc-meta-box-functions.php
в /woocommerce/includes/admin
чтобы увидеть поведение по умолчанию.
Но что мешает вам создать свою собственную функцию, которая будет основываться на функции Woo по умолчанию, а также добавить необходимые функции или даже изменить функцию по умолчанию (но при этом изменение файлов плагинов не является лучшей практикой). Ниже приведен пример того, как написать новую функцию с несколькими опорами, единственные изменения от оригинала добавили поддержку имени и нескольких атрибутов и другую логику для выбранных элементов (поскольку post meta теперь является массивом).
function woocommerce_wp_select_multiple( $field ) { global $thepostid, $post, $woocommerce; $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; $field['class'] = isset( $field['class'] ) ? $field['class'] : 'select short'; $field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : ''; $field['name'] = isset( $field['name'] ) ? $field['name'] : $field['id']; $field['value'] = isset( $field['value'] ) ? $field['value'] : ( get_post_meta( $thepostid, $field['id'], true ) ? get_post_meta( $thepostid, $field['id'], true ) : array() ); echo '<p class="form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '"><label for="' . esc_attr( $field['id'] ) . '">' . wp_kses_post( $field['label'] ) . '</label><select id="' . esc_attr( $field['id'] ) . '" name="' . esc_attr( $field['name'] ) . '" class="' . esc_attr( $field['class'] ) . '" multiple="multiple">'; foreach ( $field['options'] as $key => $value ) { echo '<option value="' . esc_attr( $key ) . '" ' . ( in_array( $key, $field['value'] ) ? 'selected="selected"' : '' ) . '>' . esc_html( $value ) . '</option>'; } echo '</select> '; if ( ! empty( $field['description'] ) ) { if ( isset( $field['desc_tip'] ) && false !== $field['desc_tip'] ) { echo '<img class="help_tip" data-tip="' . esc_attr( $field['description'] ) . '" src="' . esc_url( WC()->plugin_url() ) . '/assets/images/help.png" height="16" width="16" />'; } else { echo '<span class="description">' . wp_kses_post( $field['description'] ) . '</span>'; } } echo '</p>'; }
Пример использования функции:
woocommerce_wp_select_multiple( array( 'id' => 'newoptions', 'name' => 'newoptions[]', 'class' => 'newoptions', 'label' => __('Testing Multiple Select', 'woocommerce'), 'options' => array( '1' => 'User1', '2' => 'User2', '3' => 'User3', )) );