Пользовательское поле для поиска нескольких продуктов выберите Woocommerce

1

Я разрабатываю плагин, где мне нужно отобразить какой-то пользовательский продукт. Пока я могу сделать поле опций, но как я могу сохранить их в качестве поля параметров с идентификаторами продуктов, разделенных запятыми.

45,78,55,48, 

здесь приведен пример многопользовательского варианта поиска для продукта WooCommerce.

Изображение 51828

Вот мой код

function crp_select_products() {
    global $post, $woocommerce;
    $product_ids = array();
    ?>
    <div class="options_group">
        <?php if ( $woocommerce->version >= '3.0' ) : ?>
            <p class="form-field">
                <label for="related_ids"><?php _e( 'Search Products', 'woocommerce' ); ?></label>
                <select class="wc-product-search" multiple="multiple" style="width: 50%;" id="related_ids" name="related_ids[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations">
                    <?php
                        foreach ( $product_ids as $product_id ) {
                            $product = wc_get_product( $product_id );
                            if ( is_object( $product ) ) {
                                echo '<option value="' . esc_attr( $product_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $product->get_formatted_name() ) . '</option>';
                            }
                        }
                    ?>
                </select> <?php echo wc_help_tip( __( 'Select products are for sale product.', 'woocommerce' ) ); ?>
            </p>
        <?php endif; ?>
    </div>
    <?php
}
  • 0
    Спроси более конкретно. Где вы хотите хранить что, с какой целью?
  • 0
    @radscheit покажет это как поле опции плагина. поэтому идентификаторы выбранного продукта могут быть сохранены в качестве значения параметра с разделением запятой.
Теги:
woocommerce
product
custom-fields

1 ответ

2
Лучший ответ

Во-первых, в вашей функции что-то отсутствует, чтобы отобразить в нем сохраненные данные.

После этого это специальное поле должно отображаться внутри формы, в которой будет кнопка отправки. Таким образом, это зависит от того, где вы используете свою функцию.

Ниже приведен пример, отображающий это настраиваемое поле как настраиваемый параметр продукта, сохранение данных и отображение сохраненных в нем данных:

function crp_get_product_related_ids() {
    global $post, $woocommerce;

    $product_ids = get_post_meta( $post->ID, '_related_ids', true );
    if( empty($product_ids) )
        $product_ids = array();
    ?>
    <div class="options_group">
        <?php if ( $woocommerce->version >= '3.0' ) : ?>
            <p class="form-field">
                <label for="related_ids"><?php _e( 'Search Products', 'woocommerce' ); ?></label>
                <select class="wc-product-search" multiple="multiple" style="width: 50%;" id="related_ids" name="related_ids[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations">
                    <?php
                        foreach ( $product_ids as $product_id ) {
                            $product = wc_get_product( $product_id );
                            if ( is_object( $product ) ) {
                                echo '<option value="' . esc_attr( $product_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $product->get_formatted_name() ) . '</option>';
                            }
                        }
                    ?>
                </select> <?php echo wc_help_tip( __( 'Select products are for sale product.', 'woocommerce' ) ); ?>
            </p>
        <?php endif; ?>
    </div>
    <?php
}

add_action( 'woocommerce_product_options_general_product_data', 'add_custom_fied_in_product_general_fields', 20 );
function add_custom_fied_in_product_general_fields() {
    global $post, $woocommerce;
    crp_get_product_related_ids();
}


add_action( 'woocommerce_process_product_meta', 'process_product_meta_custom_fied', 20, 1 );
function process_product_meta_custom_fied( $product_id ){
    if( isset( $_POST['crosssell_ids'] ) ){
        update_post_meta( $product_id, '_related_ids', array_map( 'intval', (array) wp_unslash( $_POST['related_ids'] ) ) );
    }
}

Код идет в файле function.php вашей активной дочерней темы (или активной темы). Протестировано и работает.

Изображение 146455

  • 0
    Спасибо за ответ. вместо метаданных продукта можно показать это как поле опции плагина. поэтому идентификаторы выбранного продукта могут быть сохранены в качестве значения параметра с разделением запятой.
  • 1
    @Firefog Да, я полагаю ... Ваш фактический вопрос слишком расплывчатый, и вы должны дать больше информации о контексте и местоположении, больше деталей и больше связанного кода. Поэтому лучше всего сначала попробовать и, если необходимо, задать новый вопрос с необходимым кодом, позволяющим воспроизвести проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню