Nano Hash - криптовалюты, майнинг, программирование

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

Спасибо всем разработчикам StackOverflow.

Я хочу добавить больше полей в раздел связанных продуктов Woocommerce. Поля должны быть похожи на Upsell / Crosssell.

Мой код на данный момент: -

add_action( 'woocommerce_product_options_linked_product_data', 'woocom_general_product_data_custom_field' );

 woocommerce_wp_text_input( 
    array( 
      'id' => '_upsizing_products', 
      'label' => __( 'Upsizing Products', 'woocommerce' ), 
      'placeholder' => 'Upsizing Products',
      'desc_tip' => 'true',
      'description' => __( 'Select Products Here', 'woocommerce' ) 
    )
  );

В приведенном выше коде мне нужно поле со списком. Например, когда вы вводите 3 символа в поле ввода, он покажет список совпадающих продуктов, которые можно выбрать. Похоже на допродажу / кросс-продажу.

Пожалуйста, помогите мне реализовать это настраиваемое поле. Заранее спасибо.

Изменить: кто-нибудь?



Ответы:


1

В приведенном выше коде не хватает нескольких вещей.

  1. Хук, который вы использовали в первой строке, не существует. Правый хук называется woocommerce_product_options_related.
  2. Код, в котором вы создали свое настраиваемое поле, не находится внутри какой-либо функции.
  3. Вы создаете стандартное текстовое поле. Если вам нужен раскрывающийся список «Выбрать продукт», следует использовать другой подход. Это должно быть внутри той функции, которую вы используете в хуке.
  4. Вам не хватает крючка и функции, которая фактически сохраняет данные из вашего настраиваемого поля.

1. Поиск правильного зацепа / действия

Чтобы найти подходящий перехватчик, просто найдите woocommerce_product_options_ внутри плагина WoocCommerce, и должно появиться около 6 PHP-файлов. Один из этих файлов называется html-product-data-connected-products.php. Этот файл содержит все существующие параметры в этом конкретном разделе WooCommerce. Он также содержит ловушку, используемую для отображения этих опций.

Откройте файл и проверьте его. Крючок находится внизу страницы

Полный путь: / wp-content / plugins / woocommerce / includes / admin / metaboxes / views /


2. Создание раскрывающегося списка

Чтобы создать раскрывающийся список, включающий поиск продукта, вам понадобится код, сильно отличающийся от приведенного выше.

В свободное время вы можете просто скопировать и вставить один из существующих параметров в файл, упомянутый выше, а затем изменить его в соответствии с вашими потребностями.

Все это должно быть помещено в функцию с именем: woocom_linked_products_data_custom_field().

2.1. Измените идентификатор / имя

Первое, что вам нужно изменить в коде, это, конечно, уникальный идентификатор / имя поля. Он помещается в тег label (for) и тег select (id и name).

В вашем примере идентификатор / имя должны быть upsizing_products, а текст метки Upsizing Products:

<label for="upsizing_products"><?php _e( 'Upsizing Product', 'woocommerce' ); ?></label>
<select class="wc-product-search" multiple="multiple" style="width: 50%;" id="upsizing_products" name="upsizing_products[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations" data-exclude="<?php echo intval( $post->ID ); ?>">

Примечание. Не забудьте поставить [] и конец именного тега, иначе ваши данные не будут сохранены.

2.2. Показать уже выбранные товары

Следующее, что нужно сделать, это показать и выделить уже выбранные продукты в разделе WooCommerce и в раскрывающемся списке.

Для этого замените $product_ids-переменную и всю строку на:

$product_ids = get_post_meta( $post->ID, '_upsizing_products_ids', true );

Вместо этого идентификатор продукта извлекается из настраиваемого поля в базе данных вместо одной из существующих опций (например, cross_sell_ids).

Примечание. _upsizing_products_ids - это имя мета-ключа в базе данных. Мета-значение, связанное с этим ключом, содержит все данные вашего поля. Это используется для хранения и извлечения настраиваемого поля.

2.3. Отобразите поле в разделе WooCommerce

Наконец, функция должна быть правильно подключена, чтобы ее можно было отобразить в разделе Связанные продукты:

add_action( 'woocommerce_product_options_related', 'woocom_linked_products_data_custom_field' );

3. Сохраните и сохраните данные.

Теперь ваше настраиваемое поле отображается в правом разделе. Следующее, что нужно сделать, это сохранить и сохранить данные в базе данных.

Внутри новой функции используйте $_POST для извлечения данных из поля и update_post_meta для сохранения данных в базе данных, содержащей идентификатор записи, уникальный идентификатор поля / имя (мета-ключ) и сами данные (мета-значение).

function woocom_linked_products_data_custom_field_save( $post_id ){
    $product_field_type =  $_POST['upsizing_products'];
    update_post_meta( $post_id, '_upsizing_products_ids', $product_field_type );
}
add_action( 'woocommerce_process_product_meta', 'woocom_linked_products_data_custom_field_save' );

Вот полный код. Поместите его в свои темы functions.php или в файл плагина:

// Display the custom fields in the "Linked Products" section
add_action( 'woocommerce_product_options_related', 'woocom_linked_products_data_custom_field' );

// Save to custom fields
add_action( 'woocommerce_process_product_meta', 'woocom_linked_products_data_custom_field_save' );


// Function to generate the custom fields
function woocom_linked_products_data_custom_field() {
    global $woocommerce, $post;
?>
<p class="form-field">
    <label for="upsizing_products"><?php _e( 'Upsizing Product', 'woocommerce' ); ?></label>
    <select class="wc-product-search" multiple="multiple" style="width: 50%;" id="upsizing_products" name="upsizing_products[]" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products_and_variations" data-exclude="<?php echo intval( $post->ID ); ?>">
        <?php
            $product_ids = get_post_meta( $post->ID, '_upsizing_products_ids', true );

            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 Here.', 'woocommerce' ) ); ?>
</p>

<?php
}

// Function the save the custom fields
function woocom_linked_products_data_custom_field_save( $post_id ){
    $product_field_type =  $_POST['upsizing_products'];
    update_post_meta( $post_id, '_upsizing_products_ids', $product_field_type );
}

Для отображения сохраненных данных используйте _upsizing_products_ids:

echo get_post_meta( $post->ID, 'my-field-slug', true );

Ознакомьтесь с этим руководством Освоение настраиваемых полей продуктов WooCommerce для получения дополнительной информации о настраиваемых Поля для WooCommerce.

10.08.2017
  • Идеально! TheYaXxe! Спасибо! 23.09.2017
  • Я изменил поле на выбор (а не множественный выбор) ... вы знаете, как я могу разрешить нулевое / отмененное выделение в поле? См. Вопрос здесь stackoverflow.com/q/53172288/1984868 06.11.2018
  • @Sarah Я выполнил все инструкции и получаю вывод в интерфейсе, например Array. Я только хотел вывести в архиве что-то вроде петлевых продуктов с изображениями и ценами ... 30.10.2019
  • @Sarah Как показать этот выбранный товар на странице товара.? 24.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..