• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Единицы измерения товара пропали

Deffa

Новичок
Отредактировано - ребята, простите! не знаю как в этом разделе оказалась. в новички писала! А удалить нет кнопки. Не казните строго. Я исправлюсь.

Здравствуйте, предположительно после обновления темы flatsome исчезли единицы измерения товара. У меня ни в м2 или в штуках
Раньше при заполнении товара под EXTRA был раздел еще один, где выбиралось м2 или шт.
Я пробовала поставить плагин Woocoomerce Extra Price Fields но получились какие то смешные цены типа 245 р ШТ/М2 как бы штуки он создает, но и м2 не убирает.
В файле function.php вижу что-то явно связанное с моей проблемой, код есть вроде как благодаря которому добавлен был функционал, а м2 выбор или шт не работает(
Пожалуйста, могли бы вы посмотреть код и подсказать что сделать, чтобы заработало
PHP:
<?php
// Add custom Theme Functions here
add_filter( 'woocommerce_product_tabs', 'wcs_woo_remove_reviews_tab', 98 );
    function wcs_woo_remove_reviews_tab($tabs) {
    unset($tabs['reviews']);
    return $tabs;
      }
function cw_change_product_price_display( $price ) {
        $price .= '/м²';
        return $price;
    }
    add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display' );
    add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display' );
function cw_change_product_html( $price_html, $product ) {
    $unit_price = get_post_meta( $product->id, 'unit_price', true );
    if ( ! empty( $unit_price ) ) {
        $price_html = '<span class="amount">' . wc_price( $unit_price ) . '/шт.</span>'; 
    }
  
    return $price_html;
}
add_filter( 'woocommerce_get_price_html', 'cw_change_product_html', 10, 2 );
// Change the cart prices if a unit_price is set
function cw_change_product_price_cart( $price, $cart_item, $cart_item_key ) {
    $unit_price = get_post_meta( $cart_item['product_id'], 'unit_price', true );
    if ( ! empty( $unit_price ) ) {
        $price = wc_price( $unit_price ) . ' per kg'; 
    }
    return $price;
} 
add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_cart', 10, 3 );

add_filter( 'woocommerce_subcategory_count_html', 'woo_remove_category_products_count' );

function woo_remove_category_products_count() {
    return;
}
add_filter( 'wc_product_sku_enabled', '__return_true' );
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );

function woo_remove_product_tabs( $tabs ) {
    unset( $tabs['description'] );       
    unset( $tabs['reviews'] );           
    unset( $tabs['additional_information'] );   
    return $tabs;
}
add_image_size( 'tcat', 600, 400, true );
function is_subcategory() {
    $cat = get_query_var( 'product_cat' );
    $category = get_term_by( 'slug', $cat, 'product_cat' );
    return ( $category->parent !== 0 );
}
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 10);
?>

ссылку думаю смысла нет ставить? сейчас везде Цена Р/м2
 

Deffa

Новичок
может быть поле какое то надо в админке сделать? с определенным именем чтобы заработало? может быть удалилось чего при обновлении шаблона?
 

Deffa

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

marr

Специалист
Местный
предположительно после обновления темы flatsome исчезли единицы измерения товара
Если ваш разработчик вносил изменения в тему, то они конечно слетели после обновления. Есть ли возможность сделать откат из бэкапа?

На первый взгляд задача не такая уж и сложная

В чем задача-то? вы хотите убрать м2 из цены?

удалите функцию
Код:
function cw_change_product_price_display( $price ) {
        $price .= '/м²';
        return $price;
    }
    add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display' );
    add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display' );
 

Deffa

Новичок
В чем задача-то? вы хотите убрать м2 из цены?

почему убрать? часть товара в М2 часть товара в штуках. раньше оно выбиралось в админке м2 или шт и отображалось или м2 или шт. теперь только м2. и поле где можно было выбрать м2 или шт исчезло из админки.
Я попробовала поставить плагин, который меняет единицы измерения товара и он сделал ЦЕНА Р ШТ/М2)) работало без плагина я так понимаю, судя по коду в функшн пхп. что то исчезло, а что и где не пойму.
 

ADv

Гуру
Местный
почему убрать? часть товара в М2 часть товара в штуках. раньше оно выбиралось в админке м2 или шт и отображалось или м2 или шт. теперь только м2. и поле где можно было выбрать м2 или шт исчезло из админки.
Я попробовала поставить плагин, который меняет единицы измерения товара и он сделал ЦЕНА Р ШТ/М2)) работало без плагина я так понимаю, судя по коду в функшн пхп. что то исчезло, а что и где не пойму.
Как Вам ответили выше, скорее всего код, отвечающий за нужное поле был добавлен в functions.php, и код после обновления темы затерся.
Восстановитесь из бекапа (своего или от хостера) и впредь юзайте дочерние темы, чтобы безболезненно обновлять родительскую в будущем.
 

Deffa

Новичок
Как Вам ответили выше, скорее всего код, отвечающий за нужное поле был добавлен в functions.php, и код после обновления темы затерся.
Восстановитесь из бекапа (своего или от хостера) и впредь юзайте дочерние темы, чтобы безболезненно обновлять родительскую в будущем.

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

з.ы. Если у кого то будет аналогичная проблема пишите в личку код дам. может быть и вам подойдет.
 
  • Like
Реакции: ADv

Deffa

Новичок
мой знакомый предложил помочь и кажется тоже не осилил)) В админке поле появилось с м2, шт, пачка селектом. код тоже поправил, НО! Теперь в каких бы единицах измерения не сохранялся товар , на сайте он выводится ШТ. При этом в админке может быть м2 или пачка. Я не могу поверить, что не существует на форуме большого и сильного программиста, кто видит где ошибка. ну проблема же в 1 -2 строчках.. это так грустно не знать пхп(
Ну ткните меня носом кто-нибудь что на этот раз не так то? Не понимать

PHP:
<?php
add_action( 'woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields' );

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

  echo '<div class="options_group">';
    // Add Select field in woocommerce
    woocommerce_wp_select(
    array(
        'id'      => 'unit_price',
        'label'   => __( 'Единица измерения', 'productunit' ),
        'options' => array(
        '/м²' => __( '/м²', 'productunit' ),
            'шт'   => __( 'шт', 'productunit' ),
            'пачка'   => __( 'пачка', 'productunit' )
            )
        )
    );
    echo '</div>';
}
// Add custom Theme Functions here
add_filter( 'woocommerce_product_tabs', 'wcs_woo_remove_reviews_tab', 98 );
function wcs_woo_remove_reviews_tab($tabs) {
    unset($tabs['reviews']);
    return $tabs;
}
function cw_change_product_price_display( $price ) {
        $price .= '/м²';
        return $price;
    }

    add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display' );
  add_filter( 'woocommerce_get_price_html', 'cw_change_product_html', 10, 2 );
    add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display' );
  add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_cart', 10, 3 );

function cw_change_product_html( $price_html, $product ) {
    $unit_price = get_post_meta( $product->id, 'unit_price', true );
    if ( ! empty( $unit_price ) ) {
        $price_html = '<span class="amount">' . wc_price( $product->price ) . '/шт.</span>';
    //$price_html = '<span class="amount">' . wc_price( $unit_price ) . '/шт.</span>';
    }

    return $price_html;
}
// Change the cart prices if a unit_price is set
function cw_change_product_price_cart( $price, $cart_item, $cart_item_key ) {
    $unit_price = get_post_meta( $cart_item['product_id'], 'unit_price', true );
    if ( ! empty( $unit_price ) ) {
        $price = wc_price( $product->price ) . ' per kg';
    //$price = wc_price( $unit_price ) . ' per kg';
    }
    return $price;
}

add_filter( 'woocommerce_subcategory_count_html', 'woo_remove_category_products_count' );

function woo_remove_category_products_count() {
    return;
}
add_filter( 'wc_product_sku_enabled', '__return_true' );
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );

function woo_remove_product_tabs( $tabs ) {
    unset( $tabs['description'] );
    unset( $tabs['reviews'] );
    unset( $tabs['additional_information'] );
    return $tabs;
}
add_image_size( 'tcat', 600, 400, true );
function is_subcategory() {
    $cat = get_query_var( 'product_cat' );
    $category = get_term_by( 'slug', $cat, 'product_cat' );
    return ( $category->parent !== 0 );
}
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 10);

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>';
}
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 ) );

   // Unit
     $woocommerce_productunit = $_POST['unit_price'];
     if( !empty( $woocommerce_productunit ) )
        update_post_meta( $post_id, 'unit_price', esc_attr( $woocommerce_productunit ) );

}
?>
 

ADv

Гуру
Местный
В функции cw_change_product_html у Вас $price_html = '<span class="amount">' . wc_price( $product->price ) . '/шт.</span>'; штуки статично прописаны.
По идее должно подставляться значение из переменной $unit_price.
Если не прав, простите, сильно в код не вчитывался.
 

Deffa

Новичок
Ахааааа я поняла как он мне штуки вывел. Там ниже закомментированный код
$price_html = '<span class="amount">' . wc_price( $product->price ) . '/шт.</span>';
//$price_html = '<span class="amount">' . wc_price( $unit_price ) . '/шт.</span>';

Оно и было $unit_price просто не работало, что и сподвигло меня создать тему..

О КАК!!! Если раскомментировать то как было и чтобы выводилось через unit_price цена становится 0! Ну да он писал про это.. починил блин круто :LOL: Вот это костыль так костыль...

p.s. пристрелите меня.. неужели во всем рунете нет никого кто может понять почему зубару не едед? :cry:
 
Последнее редактирование:

ADv

Гуру
Местный
Ахааааа я поняла как этот чертов гений мне штуки вывел. Там ниже закомментированный код
$price_html = '<span class="amount">' . wc_price( $product->price ) . '/шт.</span>';
//$price_html = '<span class="amount">' . wc_price( $unit_price ) . '/шт.</span>';

Оно и было $unit_price просто не работало, что и сподвигло меня создать тему..

О КАК!!! Если раскомментировать то как было и чтобы выводилось через unit_price цена становится 0! Ну да он писал про это.. починил блин круто :LOL: Вот это костыль так костыль...

p.s. пристрелите меня.. неужели во всем рунете нет никого кто может понять почему зубару не едед? :cry:
У Вас постоянно отображаются штуки в строке выше.
Для того, чтобы они менялись на те значения, что требуются (м2 шт пачка), Вам необходимо заменить шт на ту переменную, значение которой выбирается в редактировании товара (?).
 

Deffa

Новичок
Вам необходимо заменить шт на ту переменную, значение которой выбирается в редактировании товара (?).
ЧАВО? :LOL: Звучит как шамбарьер берейтор приструга - для тех кто с лошадьми не работает - маты какие то) я в php к сожалению нуб. но)) Один добрый хороший человек мне таки помог. возможно тут есть что то лишнее я не понимаю, но оно точно работает под текущей версией woocommerce) может кому пригодится.
Cпасибо огромное всем за участие.
PHP:
<?php
add_action( 'woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields' );

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

  echo '<div class="options_group">';
    // Add Select field in woocommerce
    woocommerce_wp_select(
    array(
        'id'      => 'unit_price',
        'label'   => __( 'Единица измерения', 'productunit' ),
        'options' => array(
        '/м²' => __( '/м²', 'productunit' ),
            '/шт'   => __( '/шт', 'productunit' ),
            'пачка'   => __( 'пачка', 'productunit' )
            )
        )
    );
    echo '</div>';
}
// Add custom Theme Functions here
add_filter( 'woocommerce_product_tabs', 'wcs_woo_remove_reviews_tab', 98 );
function wcs_woo_remove_reviews_tab($tabs) {
    unset($tabs['reviews']);
    return $tabs;
}
function cw_change_product_price_display( $price ) {
        $price .= '/м²';
        return $price;
    }

    add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display' );
  add_filter( 'woocommerce_get_price_html', 'cw_change_product_html', 10, 2 );
    add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display' );
  add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_cart', 10, 3 );

function cw_change_product_html( $price_html, $product ) {
    $unit_price = get_post_meta( $product->id, 'unit_price', true );
    if ( ! empty( $unit_price ) ) {
        $price_html = '<span class="amount">' . wc_price( $product->price ) . $unit_price . "</span>";
    }

    return $price_html;
}
// Change the cart prices if a unit_price is set
function cw_change_product_price_cart( $price, $cart_item, $cart_item_key ) {
    $unit_price = get_post_meta( $cart_item['product_id'], 'unit_price', true );
    if ( ! empty( $unit_price ) ) {
        $price = wc_price(  $cart_item["data"]->get_price() ) . $unit_price;
    }
    return $price;
}

add_filter( 'woocommerce_subcategory_count_html', 'woo_remove_category_products_count' );

function woo_remove_category_products_count() {
    return;
}
add_filter( 'wc_product_sku_enabled', '__return_true' );
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );

function woo_remove_product_tabs( $tabs ) {
    unset( $tabs['description'] );
    unset( $tabs['reviews'] );
    unset( $tabs['additional_information'] );
    return $tabs;
}
add_image_size( 'tcat', 600, 400, true );
function is_subcategory() {
    $cat = get_query_var( 'product_cat' );
    $category = get_term_by( 'slug', $cat, 'product_cat' );
    return ( $category->parent !== 0 );
}
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 10);

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>';
}
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 ) );

   // Unit
     $woocommerce_productunit = $_POST['unit_price'];
     if( !empty( $woocommerce_productunit ) )
        update_post_meta( $post_id, 'unit_price', esc_attr( $woocommerce_productunit ) );

}
?>
 
  • Like
Реакции: ADv

ADv

Гуру
Местный
О чем и говорил = )
$price_html = '<span class="amount">' . wc_price( $product->price ) . $unit_price . "</span>";
 

Deffa

Новичок
дык я ж блондинка, брови губы и все такое)) :LOL: написали бы - вот это вставь туда то, бестолочь. заработает)) И всё. Я вон даже не в ту тему попала) вообще в новички целилась, чтобы как раз ответы были - деточка, возьми вот этот код , прилепи в 16 строку после такого то, и будет все работать. .
Торжественно клянусь одуматься и таки разобраться с ВП и woocommerce и php будь он неладен)) .
 
Сверху Снизу