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

Свойства, атрибуты, характеристики

genuk555

Новичок
Друзья, подскажите. Я думаю многие сталкивались с необходимостью вести характеристики товаров (вес, размер и т.п.) все это насколько я понимаю делается через Атрибуты (свойства) товара. Далее , открывает товар и во вкладке атрибуты жмем "добавить" выбираем "вес", жмем добавить выбираем "размер".
Есть решение\плагин , которые позволяют выводить весь список свойств для редактирования. Т.к. этих свойств может быть 20 и для каждого товара добавлять по очереди свойства это как-то как минимум странно?

Использовал в свое время плагин сравнения product compare pro (платной версии), там это было реализовано. Но столкнулся с одной проблемой, он хоть и использовать стандартные атрибуты товара, но не учитывал их например при навигации по слоям (фильтре, который также использует атрибуты). Т.е. по факту нужно было вести одни и те же свойства отдельно для сравнения и отдельно для фильтрации.
 

genuk555

Новичок
Woocommerce Bulk Attribute Manager этот смотрел. Не совсем то, он позволяет массово добавить нужные Варианты к выбранным катигориям. Т.е. выбираем нужные аттрибуты, потом категории и жмем Ок. Далее он все товары этой категории делает вариативными. (На сайте у каждого товара появляются поля для выбора)
Странно, вроде бы тривиальная задача. Есть товар, есть характеристики, просто для каждого товара прописать их в удобной форме. Неужели до этого никто не сталкивался) это вроде бы стандартная вещь для магазина.
 

brash

Новичок
Подскажите вы нашли решение? 3 день в поисках плагина или решения. Максимум что накопал с поиска это товарища по несчастью)
Предложенные плагины, к сожалению вопрос не решили.
 

genuk555

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

Я частично нашел выход огородами. ПОставил плагин Advanced Custom Fields, у него есть возможность привязывать создаваемые поля к таксономиям. Т.е. создаю отдельно в Woocommerce атрибуты с вариантами. Далее в ACF создаю такие же поля (например, вес, размер и т.п.) и привязываю эти поля по таксономиям к созданным одноименным атрибутам. Он сам подхватывает варианты и выводит их на странице редактирования товара. ПРичем выводит достаточно симпатично. как раз то что нужно. Минус в том, что приходится 2 раза создавать одни и те же аттрибуты по сути. Но с другой стороны есть и плюсы, эти поля можно привязать к разным категориям. Например одни аттрибуты к одной категории товаров, другие к другой + поля можно сортировать как угодно (чего в стандартных атрибутах я тоже не обнаружил).

Но сейчас парюсь по поводу вывода всей этой картины, получается выводить все атрибуты но по одному, вот такой вот конструкцией:

<?php $term = get_field('brands'); if( $term ): ?>
<h2><?php echo $term->name; ?></h2>
<p><?php echo $term->description; ?></p>
<?php endif; ?>

- brands - это слаг таксономии.

получается выводить названия атрибутов (лейблы) все сразу (документация ACF http://www.advancedcustomfields.com/resources/get_field_objects/)

<?php
$fields = get_field_objects();

if( $fields )
{
foreach( $fields as $field_name => $field )
{
echo '<div>';
echo '<h3>' . $field['label'] . '</h3>';
echo $field['value'];
echo '</div>';
}
}

?>

Вот эта штука echo $field['value']; по идее должна выводить значение поля, но не вы выодит..
Как совместить это дело в один цикл (в виду отсутствия знания Php) не знаю как.
Т.е. чтобы и название атрибуты и его значение выводились все что соответствуют товару.
Если знаете как решить эту проблему буду блогадарен.
 

searchingman

Гуру
Местный
genuk555, Вы хотите вывести все атрибуты, присвоенные к товарам, в виде списка ?
 

genuk555

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

brash

Новичок
......

Если знаете как решить эту проблему буду блогадарен.
Я решил пойти по вашему пути;
- поставил ACF,
- привязал по таксономии поля,
Кстати вывелись и правда красиво (в режиме добавления товара)
Попробовал в этих полях внести значения и сохранить товар,
и о чудо они изменились на те которые я выбрал, но радовался я недолго))
Как оказалось когда я в родных атрибутах удаляю поле то это поле уже не показывается.

Отсюда вывод надо подключать код который писался выше:
Вписал его в шаблон своей темы
layouts/theme.php:

<?php $term = get_field('brands'); if( $term ): ?>
<h2><?php echo $term->name; ?></h2>
<p><?php echo $term->description; ?></p>
<?php endif; ?>

заместо - brands - написал свое значение поле - pa_tip -
вылезло:
<h2>Блочный</h2>
<p></p>


вобщем как вы и говорите надо эти данные суметь достать из массива.

С php к сожалению дружу на уровне повезет - не повезет)
Начал изучать массивы))
Вот этим кодом вывел массив:
<?php
$fields = get_field_objects();
if( $fields )
{
foreach( $fields as $field_name => $field )
{
echo '<div>';
echo '<h3>' . $field['label'] . '</h3>';
print_r($field);
echo '</div>';
}
}
?>

вот что получил:

Тип дома
Array ( [key] => field_558842d4382aa [label] => Тип дома [name] => pa_tip [_name] => pa_tip [type] => taxonomy [order_no] => 0 [instructions] => [required] => 0 [id] => acf-field-pa_tip [class] => taxonomy [conditional_logic] => Array ( [status] => 0 [rules] => Array ( [0] => Array ( [field] => null [operator] => == ) ) [allorany] => all ) [taxonomy] => pa_tip [field_type] => radio [allow_null] => 1 [load_save_terms] => 1 [return_format] => object [field_group] => 104 [multiple] => 0 [value] => stdClass Object ( [term_id] => 41 [name] => Блочный [slug] => blochnyj [term_group] => 0 [term_taxonomy_id] => 41 [taxonomy] => pa_tip [description] => [parent] => 0 [count] => 3 [object_id] => 131 [filter] => raw ) )

там еще есть аналогичные поля но думаю этого достаточно,
Теперь пытаюсь понять что с этим делать))

Вобщем врятли я вам помог, как говорится чем богаты, а я буду дальше с бубном плясать))
Благо что время свободное есть)
 

genuk555

Новичок
>>Как оказалось когда я в родных атрибутах удаляю поле то это поле уже не показывается
Ну тут оно вроде все логично. ACF всего лишь вытягивает значения по таксономии, если вы удалили таксономию или значение то и выводится в ACF оно не будет.

У меня не много свойств, всего 7 штук. Поэтому пока решил обойтись выводом в ручную каждого:

$term = get_field('brands'); if( $term )
echo '<h3>Производитель</h3>';
echo '<span>' . $term->name . '</span>';
$term = get_field('h_tip'); if( $term )
echo '<h3>Тип</h3>';
echo '<span>' . $term->name . '</span>';
и т.д.

В итоге получил название характеристики и ее значение, дальше дело css как это оформить. Но конечно если свойств штук 30, то это не очень гибкий способ. Но работает)
Прикрутил еще Advanced AJAX Product Filters for WooCommerce и отлично сортируется по этим характеристикам.
 

genuk555

Новичок
забыл написать, чтобы свойство поля выводилось на сайте необходимо при создании поля в acf выбрать "обьект", а не "ID" таксономии в свойствах поля.
 

brash

Новичок
мне кажется у меня что то вышло))

я обратил внимание что
echo $field['name'];
выводит значение поля и я подумал, а если назначить этому переменную типа
$asdf = $field['name'];
и потом эту переменную вставить в $term2 = get_field("$asdf");
то в цикле каждый раз будет новое значение, в итоге получаем название и характеристики.

И вот в кончечном счете как это смотрится:

<?php
$fields = get_field_objects();
$term = get_field_objects();
$term2 = get_field_objects();
if( $fields )
{
foreach( $fields as $field_name => $field ) {
if( $term ):
echo '<h2>' . $field['label'] . '</h2>';
$asdf = $field['name'];
$term2 = get_field("$asdf");
echo '<span>' . $term2->name . '</span>';
//echo $field['name'];
endif;
}
}
?>

У меня заработало, поля и характеристики выводятся.
Ну только надо еще посмотреть так как я только что этот код придумал и сходу решил поделится.
Наверняка есть более красивый способ но этот работает.
Пока смущает только что выводятся поля характеристик в том случае,
если у меня в ACF в характеристике ТИП ПОЛЯ стоит значение радио кнопки(одно значение),
если ставлю множественный выбор то не выводится, ну это я думаю решаемо.
 

genuk555

Новичок
Да, у меня тоже работает. Помогли друг другу)
Осталось решить с чекбоксами и почти иедально будет.
 

brash

Новичок
Вот еще небольшое дополнение если мы выбираем в произвольных полях ТЕКСТ
Чтобы он он отображался я сделал дополнительное условие, конечно тупо но работает и произвольный текст показывает.
<?php
$text = get_field(text);
$fields = get_field_objects();
$term = get_field_objects();
$term2 = get_field_objects();
$poteksty = "text";
if( $fields )
{
foreach( $fields as $field_name => $field ) {
if( $field['name'] == $poteksty) {
echo "<div style='margin-bottom:10px;'><b>" . $field['label'] . '</b>: ';
$asdf = $field['name'];
$term2 = get_field("$asdf");
echo '<span>' . $text. '</span></div>';
}

else if( $term ):
echo "<div style='margin-bottom:10px;'><b>" . $field['label'] . '</b>: ';
$asdf = $field['name'];
$term2 = get_field("$asdf");
echo '<span>' . $term2->name . '</span></div>'; //выводит когда одно значение -> означает залезть в term2 и взять оттуда name - посмотреть как из массива взять несколько значений
endif;
}
}
?>

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

Solomon Fox

Форумчанин
Вот наконец нашел нужную тему. У меня нужно заменить вывод ярлыка на его название. Т.е допустим название: 5 литров ярлык 5-litrov вот нужно вместо английских вывести русские. Если пытаюсь ярлык назвать по русски одни кракозябры, сейчас буду пробовать ваш код может заработает.

<?php foreach($value['attributes'] as $key => $val ) {
$val = str_replace(array('-','_'), ' ', $val);
printf( '<span class="attr attr-%s">%s</span>', $key, ucwords($val) );
} ?>
вот кусок кода который выводит ярлык. Может кому то пригодится. Нужно как то понять это на название ярлыка.
 

brash

Новичок
Вот наконец нашел нужную тему. У меня нужно заменить вывод ярлыка на его название. Т.е допустим название: 5 литров ярлык 5-litrov вот нужно вместо английских вывести русские. Если пытаюсь ярлык назвать по русски одни кракозябры, сейчас буду пробовать ваш код может заработает.

<?php foreach($value['attributes'] as $key => $val ) {
$val = str_replace(array('-','_'), ' ', $val);
printf( '<span class="attr attr-%s">%s</span>', $key, ucwords($val) );
} ?>
вот кусок кода который выводит ярлык. Может кому то пригодится. Нужно как то понять это на название ярлыка.

Первое что пришло на ум из простого... Может в UTF кодировке без boom сохранить файлик ваш?
 

Solomon Fox

Форумчанин
Строго говоря это не всем кракозябры это %d0%bb%d0%b8%d1%82%d1%80%d0%be%d0%b2 вот я думал может как-то перекодировать текст в русские буквы? Т.к. встречал код перекодировщика на просторах сети. Из url в текст, может кто пользовался подобным инструментом для wp?
 

Solomon Fox

Форумчанин
плюнул и купил платный плагин. Он решает все проблемы корректно
 

Ajambex

Новичок
Пожалуйста, подскажите кто в курсе. Поиском пользовался, не помогло.
Есть атрибуты товара (размер), из них созданы вариации. На странице товара можно выбрать любой размер (выпадающее меню), но все варианты располагаются в алфавитном порядке: L, M, S, XL... Мне же нужно, чтобы они логически выстраивались от меньшего размера к большему: S, M, L...
Возможно, при создании атрибутов моей ошибкой было назначением им ярлыков по их же названию, а не, например, цифрами (от 1 до 6 в логическом порядке). Но теперь поздно пить боржоми - на сайте уже очень много товаров. Можно как-то обойтись малой кровью, чтобы не редактировать атрибуты каждого товара?
 
Сверху Снизу