2016-01-19 2 views
-2

ВОПРОС ОБНОВЛЕНО КАК ЛЮДИ КАЗАЛОСЬ ЭТО понимают:Пользовательские поля в вариациях продукции WooCommerce

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

Например, у меня есть продукт, который поставляется в двух размерах, 2 литрах и 10 литрах, поэтому он представляет собой переменный продукт с двумя вариантами продукта «2 литра» и «10 литров». Если я поставлю флажок в поле «отображение на странице продукта», размер отображается на вкладке «Дополнительная информация» следующим образом: «Размер: 2 литра, 10 литров». Я хочу, чтобы он работал как вес и габариты, поэтому, когда выбран вариант «2 литра», на вкладке «Дополнительная информация» будет отображаться «Размер: 2 литра», а когда выбрано значение «10 литров» продукта, Вкладка «Дополнительная информация» отобразит «Размер: 10 литров».

Можно ли это сделать?

+0

Я не думаю, что вам нужны пользовательские поля. Похоже, вам нужно создать другой атрибут для «размера» и создать дополнительные варианты, основанные на этом новом атрибуте. – helgatheviking

+0

Я сделал это. Но на вкладке «Дополнительная информация» указано «Размер: 2 литра, 10 литров», независимо от выбранного варианта. Мне нужно, чтобы он сказал «Размер: 2 литра», когда выбрано изменение 2 литра, и «Размер: 10 литров» при выборе 10 литров. Это моя проблема. –

+0

Это другой вопрос, что вы описали выше. Можете ли вы изменить свой вопрос? – helgatheviking

ответ

0

Вот полный код для добавления всех типов пользовательских полей ввода для вариации продукта:

<?php 
// Add Variation Settings 
add_action('woocommerce_product_after_variable_attributes','variation_settings_fields', 10, 3); 
// Save Variation Settings 
add_action('woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 2); 
/** 
* Create new fields for variations 
* 
*/ 
function variation_settings_fields($loop, $variation_data, $variation) { 
    // Text Field 
    woocommerce_wp_text_input( 
     array( 
      'id'   => '_text_field[' . $variation->ID . ']', 
      'label'  => __('My Text Field', 'woocommerce'), 
      'placeholder' => 'http://', 
      'desc_tip' => 'true', 
      'description' => __('Enter the custom value here.', 'woocommerce'), 
      'value'  => get_post_meta($variation->ID, '_text_field', true) 
     ) 
    ); 
    // Number Field 
    woocommerce_wp_text_input( 
     array( 
      'id'   => '_number_field[' . $variation->ID . ']', 
      'label'  => __('My Number Field', 'woocommerce'), 
      'desc_tip' => 'true', 
      'description' => __('Enter the custom number here.', 'woocommerce'), 
      'value'  => get_post_meta($variation->ID, '_number_field', true), 
      'custom_attributes' => array(
          'step' => 'any', 
          'min' => '0' 
         ) 
     ) 
    ); 
    // Textarea 
    woocommerce_wp_textarea_input( 
     array( 
      'id'   => '_textarea[' . $variation->ID . ']', 
      'label'  => __('My Textarea', 'woocommerce'), 
      'placeholder' => '', 
      'description' => __('Enter the custom value here.', 'woocommerce'), 
      'value'  => get_post_meta($variation->ID, '_textarea', true), 
     ) 
    ); 
    // Select 
    woocommerce_wp_select( 
    array( 
     'id'   => '_select[' . $variation->ID . ']', 
     'label'  => __('My Select Field', 'woocommerce'), 
     'description' => __('Choose a value.', 'woocommerce'), 
     'value'  => get_post_meta($variation->ID, '_select', true), 
     'options' => array(
      'one' => __('Option 1', 'woocommerce'), 
      'two' => __('Option 2', 'woocommerce'), 
      'three' => __('Option 3', 'woocommerce') 
      ) 
     ) 
    ); 
    // Checkbox 
    woocommerce_wp_checkbox( 
    array( 
     'id'   => '_checkbox[' . $variation->ID . ']', 
     'label'   => __('My Checkbox Field', 'woocommerce'), 
     'description' => __('Check me!', 'woocommerce'), 
     'value'   => get_post_meta($variation->ID, '_checkbox', true), 
     ) 
    ); 
    // Hidden field 
    woocommerce_wp_hidden_input(
    array( 
     'id' => '_hidden_field[' . $variation->ID . ']', 
     'value' => 'hidden_value' 
     ) 
    ); 
} 
/** 
* Save new fields for variations 
* 
*/ 
function save_variation_settings_fields($post_id) { 
    // Text Field 
    $text_field = $_POST['_text_field'][ $post_id ]; 
    if(! empty($text_field)) { 
     update_post_meta($post_id, '_text_field', esc_attr($text_field)); 
    } 

    // Number Field 
    $number_field = $_POST['_number_field'][ $post_id ]; 
    if(! empty($number_field)) { 
     update_post_meta($post_id, '_number_field', esc_attr($number_field)); 
    } 
    // Textarea 
    $textarea = $_POST['_textarea'][ $post_id ]; 
    if(! empty($textarea)) { 
     update_post_meta($post_id, '_textarea', esc_attr($textarea)); 
    } 

    // Select 
    $select = $_POST['_select'][ $post_id ]; 
    if(! empty($select)) { 
     update_post_meta($post_id, '_select', esc_attr($select)); 
    } 

    // Checkbox 
    $checkbox = isset($_POST['_checkbox'][ $post_id ]) ? 'yes' : 'no'; 
    update_post_meta($post_id, '_checkbox', $checkbox); 

    // Hidden field 
    $hidden = $_POST['_hidden_field'][ $post_id ]; 
    if(! empty($hidden)) { 
     update_post_meta($post_id, '_hidden_field', esc_attr($hidden)); 
    } 
} 
?> 

Чтобы получить эти значения на внешнем интерфейсе, нам просто необходимо использовать популярный get_post_meta функцию().

Ссылка на статью здесь:

http://www.remicorson.com/woocommerce-custom-fields-for-variations/

+0

Это просто объясняет, как добавлять переменные продукты. В нем ничего не говорится о добавлении настраиваемых полей к вариантам продукта и их отображении на вкладке «Дополнительная информация». –

+0

@ Jeppe Bech, Извините, я не понял ваш вопрос. Я только что изменил ответ в соответствии с вашими потребностями. –

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

0

Вот первая попытка. В таблице атрибутов не так много, но при изменении раскрывающегося списка атрибута он найдет атрибут на вкладке дополнительной информации (где он указан в WooCommerce по умолчанию) и измените текст в соответствии с меткой в ​​раскрывающемся списке , Проблема возникает, когда клиент переключается обратно на пустую опцию «выбрать», поэтому вам нужно развернуть это, чтобы как-то объяснить это.

jQuery(document).ready(function($) { 

    $(".variations_form").on('change', '.variations select', function() { 
     id = $(this).attr('id'); 
     attribute = toTitleCase($(this).attr('id').replace("pa_", "")); 
     selected = $(this).find('option:selected').text(); 
     $('#tab-additional_information').find('.shop_attributes th:contains('+attribute+')').next('td').text(selected); 
    }); 

    function toTitleCase(str){ 
     return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
    } 
}); 

Сохранить выше, как somescript.js в папке вашей темы. Затем добавьте следующее к functions.php, чтобы правильно установить сценарий.

/** 
* Proper way to enqueue scripts and styles 
*/ 
function theme_name_scripts() { 
    wp_enqueue_script('script-name', get_template_directory_uri() . '/somescript.js', array('jquery'), '1.0.0', true); 
} 

add_action('wp_enqueue_scripts', 'theme_name_scripts'); 
+0

Куда идет этот код? Я попытался положить его в конец функции my.php моей темы, но это заставило сайт исчезнуть (ошибка сервера 500). –

+0

Это javascript, поэтому нет, он не принадлежит 'functions.php'. Вам нужно сохранить его как файл 'something.js' и использовать [' wp_enqueue_script() '] (https://codex.wordpress.org/Function_Reference/wp_enqueue_script) из вашего' functions.php' для его загрузки. – helgatheviking

+0

ОК, попробовал, но он не работает. Так или иначе, он завинчивает размеры изображения продукта. –