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

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

Тема в разделе "Вопросы, советы и доработки.", создана пользователем genuk555, 18 июн 2015.

  1. genuk555

    genuk555

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

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

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    553
    Баллы:
    113
  3. genuk555

    genuk555

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

    brash

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

    genuk555

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

    Я частично нашел выход огородами. ПОставил плагин 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) не знаю как.
    Т.е. чтобы и название атрибуты и его значение выводились все что соответствуют товару.
    Если знаете как решить эту проблему буду блогадарен.
     
    • Нравится Нравится x 1
  6. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    553
    Баллы:
    113
    genuk555, Вы хотите вывести все атрибуты, присвоенные к товарам, в виде списка ?
     
  7. genuk555

    genuk555

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    да) в идеале сначала label (название характеристики) и потом знаечние самого атрибута. В виде списка по очереди.
    Вот отдельно значение и отдельно список названий получается вывести , а совместить не знаю как )
     
  8. brash

    brash

    Сообщения:
    11
    Симпатии:
    5
    Баллы:
    3
    Я решил пойти по вашему пути;
    - поставил 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 ) )

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

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

    genuk555

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    >>Как оказалось когда я в родных атрибутах удаляю поле то это поле уже не показывается
    Ну тут оно вроде все логично. 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 и отлично сортируется по этим характеристикам.
     
  10. genuk555

    genuk555

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    забыл написать, чтобы свойство поля выводилось на сайте необходимо при создании поля в acf выбрать "обьект", а не "ID" таксономии в свойствах поля.
     
  11. brash

    brash

    Сообщения:
    11
    Симпатии:
    5
    Баллы:
    3
    мне кажется у меня что то вышло))

    я обратил внимание что
    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 в характеристике ТИП ПОЛЯ стоит значение радио кнопки(одно значение),
    если ставлю множественный выбор то не выводится, ну это я думаю решаемо.
     
  12. genuk555

    genuk555

    Сообщения:
    9
    Симпатии:
    2
    Баллы:
    3
    Да, у меня тоже работает. Помогли друг другу)
    Осталось решить с чекбоксами и почти иедально будет.
     
  13. brash

    brash

    Сообщения:
    11
    Симпатии:
    5
    Баллы:
    3
    Вот еще небольшое дополнение если мы выбираем в произвольных полях ТЕКСТ
    Чтобы он он отображался я сделал дополнительное условие, конечно тупо но работает и произвольный текст показывает.
    <?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;
    }
    }
    ?>

    а с выводом чекбоксов пока никак не выходит, буду думать. Если у вас вдруг что то появится то буду рад)
     
    • Нравится Нравится x 1
  14. Solomon Fox

    Solomon Fox

    Сообщения:
    90
    Симпатии:
    4
    Баллы:
    8
    Вот наконец нашел нужную тему. У меня нужно заменить вывод ярлыка на его название. Т.е допустим название: 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) );
    } ?>
    вот кусок кода который выводит ярлык. Может кому то пригодится. Нужно как то понять это на название ярлыка.
     
  15. brash

    brash

    Сообщения:
    11
    Симпатии:
    5
    Баллы:
    3
    Первое что пришло на ум из простого... Может в UTF кодировке без boom сохранить файлик ваш?
     
  16. Solomon Fox

    Solomon Fox

    Сообщения:
    90
    Симпатии:
    4
    Баллы:
    8
    Фаил и так в такой кодировке)
     
  17. Solomon Fox

    Solomon Fox

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

    Solomon Fox

    Сообщения:
    90
    Симпатии:
    4
    Баллы:
    8
    плюнул и купил платный плагин. Он решает все проблемы корректно
     
    • Согласен Согласен x 2
  19. Ajambex

    Ajambex

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

    Mikeekb

    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Какой?