/ Плагины / Единица измерения товара

Единица измерения товара

HIT

14.10.2016

9448

14

В связи с растущими потребностями к функционалу интернет-магазинов будем создавать востребованный функционал на базе плагина Woocommerce.

Единица измерения товара

Если необходимо выводить единицу товара (шт, кв.м, упаковка, пог.м, и т.д.), сделаем metabox для данного значения, в вкладке Woocommerce Основные. Поле можно задать текстовым или сделать список из вариантов.

Список из вариантов

add_action( 'woocommerce_product_options_shipping_product_data', 'woo_add_custom_general_fields' );
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

function woo_add_custom_general_fields() {

global $woocommerce, $post;
 
echo '<div class="options_group">';
// Add Select field in woocommerce
woocommerce_wp_select( 
array( 
	'id'      => '_select', 
	'label'   => __( 'Единица измерения', 'productunit' ), 
	'options' => array(
		'шт'   => __( 'шт', 'productunit' ),
		'пачка'   => __( 'пачка', 'productunit' ),
		'кв.м' => __( 'кв.м', 'productunit' )
		)
	)
);
echo '</div>'; }

Текстовое поле — Единица

add_action( 'woocommerce_product_options_shipping_product_data', 'woo_add_custom_general_fields' );
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

function woo_add_custom_general_fields() {

global $woocommerce, $post;
 
echo '<div class="options_group">'; 

// Add Text field in woocommerce 
woocommerce_wp_text_input( 
array( 
'id' => '_text_field', 
'label' => __( 'My Text Field', 'woocommerce' ), 
'placeholder' => 'http://', 
'desc_tip' => 'true', 
'description' => __( 'Enter the custom value here.', 'woocommerce' ) 
) 
); 

echo '</div>';}

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

function woo_add_custom_general_fields_save( $post_id ){
	
	// Text Field
	$woocommerce_text_field = $_POST['_text_field'];
	if( !empty( $woocommerce_text_field ) )
	update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
		
	// Select
	$woocommerce_select = $_POST['_select'];
	if( !empty( $woocommerce_select ) )
	update_post_meta( $post_id, '_select', esc_attr( $woocommerce_select ) );
	
}

Единица товара после цены

Создаем функцию привязки единицы измерения к цене.

add_filter( 'woocommerce_cart_product_price' , 'custom_price', 10, 2);
add_filter( 'woocommerce_get_price_html' , 'custom_price', 10, 2);

function custom_price( $price, WC_Product $product ){

$unit = get_post_meta( $product->get_ID(), '_select', true );

if ($unit) {

$price .= '<span class="woocommerce-Price-amount amount"><span class="product price amount rubl">';
$price .= ' / ' ;
$price .= $unit;
$price .= '</span></span>';

}

return $price;

}
Все это решение по внедрению единицы измерения имеет один недостаток — данное пользовательское поле не появляется в меню массового редактирования товаров.

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

Единица измерения в виде атрибута

Немного меняем предыдущую функцию. pa_klass-zashhityi — slug нужного атрибута

function custom_price( $price, WC_Product $product ){

if (get_the_terms( $post->ID , 'pa_klass-zashhityi')) {
$units = get_the_terms( $post->ID , 'pa_klass-zashhityi');
foreach( $units as $unit ){
echo $unit->name;
}

$price .= '<span class="woocommerce-Price-amount amount"><span class="product price amount rubl">';
$price .= ' / ' ;
$price .= $unit->name;
$price .= '</span></span>';

}

return $price;

}

Обновленная (более короткая) функция прибавления к цене:

function custom_price( $price ){
  
    global $post;
    
    $unit = wp_get_object_terms($post->ID, 'pa_unit');  

  if (!empty($unit)) {  

	$price .= '';
	$price .= ' / ' ; 
	$price .= $unit[0]->name;
	$price .= '</span></span>';
	
  }
	  
    return $price;

}
Вывести атрибут товара в виде поля для ввода. Стандартные атрибуты вводить довольно неудобно.

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
WooCommerce and 1C:Enterprise

WooCommerce and 1C:Enterprise

Разбираем на элементы плагин WooCommerce and 1C:Enterprise/1С:Предприятие Data Exchange. Плагин дает функционал обмена данными между сайтом и программой 1С: Предприятие. Некоторые моменты синхронизации сайта с 1С описаны в статье Интеграция Читать далее »

Upgrade WC

Upgrade WC

Очередная серия улучшений (upgrade) плагина WC. Буду добавлять по мере изучения новые решения. Поиск по SKU (артикулу) Из коробки WC не ищет по артикулам (SKU). Но достаточно установить плагин Search Читать далее »

/
Метод изменения шаблонов woocommerce

Метод изменения шаблонов woocommerce

В данной статье будет рассмотрен метод изменения шаблонов плагина Woocommerce. Разделение шаблонов категории и товара Первым делом надо разделить общий шаблон woocommerce.php на woocommerce-product.php и woocommerce-category.php. Делаем это простой проверкой: Читать далее »

Добавить комментарий

14 комментариев

  1. Олег

    Я не понял куда это вставлять?

    1. Alexandr

      Это все функции. Вставлять можно в functions.php, либо подключить к functions отдельный файл с функциями woocommerce (я так делаю), либо можно сделать плагином.

      1. Олег

        добавил код из первого блока в function.php, который лежит в паке wp-includes, ни чего не происходит, может я туплю))) что то ведь еще нужно где то добавить, в файле php который выводит страницу настройки товара в админке?

        1. Alexandr

          Вы не туда добавили. Вставлять надо в файл functions который находится в папке темы (site.ru/wp-content/themes/ваша_тема/functions.php). Если добавить только первый абзац ничего и не добавится. Первый и второй абзацы это варианты типов полей (текстовым и списком), далее надо добавить функцию сохранения поля и еще одна функция привязки нового поля к выводимой цене. В шаблонах WC редактировать ничего не нужно — все работает на хуках.

          1. Олег

            Александр, спасибо за ответы! Добавил вот такой код в function.php, который лежит в папке моего шаблона, шаблон у меня ColorMag

            add_action( ‘woocommerce_product_options_shipping_product_data’, ‘woo_add_custom_general_fields’ );
            add_action( ‘woocommerce_process_product_meta’, ‘woo_add_custom_general_fields_save’ );

            function woo_add_custom_general_fields() {

            global $woocommerce, $post;

            echo »;
            // Add Select field in woocommerce
            woocommerce_wp_select(
            array(
            ‘id’ => ‘_select’,
            ‘label’ => __( ‘Единица измерения’, ‘productunit’ ),
            ‘options’ => array(
            ‘шт’ => __( ‘шт’, ‘productunit’ ),
            ‘пачка’ => __( ‘пачка’, ‘productunit’ ),
            ‘кв.м’ => __( ‘кв.м’, ‘productunit’ )
            )
            )
            );
            echo »; }
            function woo_add_custom_general_fields_save( $post_id ){

            // Select
            $woocommerce_select = $_POST[‘_select’];
            if( !empty( $woocommerce_select ) )
            update_post_meta( $post_id, ‘_select’, esc_attr( $woocommerce_select ) );

            }

            add_filter( ‘woocommerce_cart_product_price’ , ‘custom_price’, 10, 2);
            add_filter( ‘woocommerce_get_price_html’ , ‘custom_price’, 10, 2);

            function custom_price( $price, WC_Product $product ){

            if (get_post_meta( $product->id, ‘_select’, true )) {

            $unit = get_post_meta( $product->id, ‘_select’, true );

            $price .= »;
            $price .= ‘ / ‘ ;
            $price .= $unit;
            $price .= »;

            }

            return $price;

            }

            К сожалению ни чего не изменилось((

          2. Alexandr

            А в товаре у вас должно появилось нового поля (select). Заполните его для какого-либо товара, и тогда единица выведется после цены. Если поле не заполнено — ничего не выводится..

  2. Владимир

    У меня тоже не работает.
    Напрягает еще вот эта строка function custom_price( $price, WC_Product $product ), а именно WC_Product $product. Почему тут пробел?

    1. Alexandr

      Сама запись такого вида
      function custom_price( $price, WC_Product $product )
      у меня работает корректно.

      По поводу того что не работает — попробуйте на промежуточных этапах «прозвонить» функции. На каком моменте не работает?!

  3. airy

    У вас в функции привязки единицы измерения к цене производится двойной запрос к базе данных:
    if (get_post_meta( $product->get_ID(), '_select', true )) {
    $unit = get_post_meta( $product->get_ID(), '_select', true );

    Лучше вот так:

    $unit = get_post_meta( $product->get_ID(), '_select', true );
    if ($unit) {
    }

    1. Alexandr

      Вы абсолютно правы. Спасибо!
      Изменил функцию в посте.

  4. Александр

    Спасибо большое! долго искал это. все работает!!! делал через атрибуты. для тех кто, как я, не очень в программировании нужно вставить functions.php темы: 
    add_filter( ‘woocommerce_cart_product_price’ , ‘custom_price’, 10, 2);add_filter( ‘woocommerce_get_price_html’ , ‘custom_price’, 10, 2);function custom_price( $price ){      global $post;        $unit = wp_get_object_terms($post->ID, ‘pa_edinitsa-izmereniya’);    if (!empty($unit)) {      $price .= »;    $price .= ‘ / ‘ ;     $price .= $unit[0]->name;    $price .= ‘</span></span>’;      }     return $price;}

  5. фффф

    Ничего нигде не добавляется…

  6. WorldWebs

    Не работает выдаёт Fatal error: Cannot redeclare woo_add_custom_general_fields()

    1. Alexandr

      Данная ошибка означает что функция woo_add_custom_general_fields() уже где-то объявлена. т.е. вы её прописали повторно.

Единица измерения товара
Плагины WordPress
Рекомендации для васПлагины WordPressOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.