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

Оформление страницы "Продукта"

Image CMS

cooledit

Новичок
#1
Добрый день форумчане. Нужна помощь в оформлении магазина. Нашел способ использовать таблицу в вариативном товаре, что очень помогло, но остались недоработки. Вариация отображается как slug, а надо чтобы отображалось типа "Вид: НАЗВАНИЕ, Вес: НУЖНЫЙ ВЕС". И для страницы с одним товаром надо такое оформление, как у вариативного - т.е. в виде таблицы.
 

Вложения

cooledit

Новичок
#2
Кстати, вариативный товар в виде таблицы:

Код:
function woocommerce_variable_add_to_cart(){
    global $product, $post;
    $variations = find_valid_variations();
    // Check if the special 'price_grid' meta is set, if it is, load the default template:
    if ( get_post_meta($post->ID, 'price_grid', true) ) {
        // Enqueue variation scripts
        wp_enqueue_script( 'wc-add-to-cart-variation' );
        // Load the template
        wc_get_template( 'single-product/add-to-cart/variable.php', array(
                'available_variations'  => $product->get_available_variations(),
                'attributes'            => $product->get_variation_attributes(),
                'selected_attributes'   => $product->get_variation_default_attributes()
            ) );
        return;
    }
    // Cool, lets do our own template!
    ?>
    <table class="variations variations-grid" cellspacing="0">
        <tbody>
            <?php
            foreach ($variations as $key => $value) {
                if( !$value['variation_is_visible'] ) continue;
            ?>
            <tr>
                <td>
                    <?php foreach($value['attributes'] as $key => $val ) {
                        $val = str_replace(array('-','_'), ' ', $val);
                        printf( '<span class="attr attr-%s">%s</span>', $key, ucwords($val) );
                    } ?>
                </td>
                <td>
                    <?php echo $value['price_html'];?>
                </td>
                <td>
                    <?php if( $value['is_in_stock'] ) { ?>
                    <form class="cart" action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" method="post" enctype='multipart/form-data'>
                        <?php woocommerce_quantity_input(); ?>
                        <?php
                        if(!empty($value['attributes'])){
                            foreach ($value['attributes'] as $attr_key => $attr_value) {
                            ?>
                            <input type="hidden" name="<?php echo $attr_key?>" value="<?php echo $attr_value?>">
                            <?php
                            }
                        }
                        ?>
                        <button type="submit" class="single_add_to_cart_button btn btn-primary"><span class="glyphicon glyphicon-tag"></span> Add to cart</button>
                        <input type="hidden" name="variation_id" value="<?php echo $value['variation_id']?>" />
                        <input type="hidden" name="product_id" value="<?php echo esc_attr( $post->ID ); ?>" />
                        <input type="hidden" name="add-to-cart" value="<?php echo esc_attr( $post->ID ); ?>" />
                    </form>
                    <?php } else { ?>
                        <p class="stock out-of-stock"><?php _e( 'This product is currently out of stock and unavailable.', 'woocommerce' ); ?></p>
                    <?php } ?>
                </td>
            </tr>
            <?php } ?>
        </tbody>
    </table>
    <?php
}

find_valid_variations loops through your product variations and fills in the ‘anys’


function find_valid_variations() {
    global $product;
    $variations = $product->get_available_variations();
    $attributes = $product->get_attributes();
    $new_variants = array();
    // Loop through all variations
    foreach( $variations as $variation ) {
        // Peruse the attributes.
        // 1. If both are explicitly set, this is a valid variation
        // 2. If one is not set, that means any, and we must 'create' the rest.
        $valid = true; // so far
        foreach( $attributes as $slug => $args ) {
            if( array_key_exists("attribute_$slug", $variation['attributes']) && !empty($variation['attributes']["attribute_$slug"]) ) {
                // Exists
            } else {
                // Not exists, create
                $valid = false; // it contains 'anys'
                // loop through all options for the 'ANY' attribute, and add each
                foreach( explode( '|', $attributes[$slug]['value']) as $attribute ) {
                    $attribute = trim( $attribute );
                    $new_variant = $variation;
                    $new_variant['attributes']["attribute_$slug"] = $attribute;
                    $new_variants[] = $new_variant;
                }
            }
        }
        // This contains ALL set attributes, and is itself a 'valid' variation.
        if( $valid )
            $new_variants[] = $variation;
    }
    return $new_variants;
}
 

Stork.71

Гуру
Местный
#3
симпотичный кодик :)
по ошибке ничего не подскажу: не программер. Хотя помнится частенько у народа возникали проблемы с выводом slug'a вместо названия свойств. Поищите по форуму, может найдете.
Чтобы сделать обычный товар тоже с табличкой, попробуйте найти файлик woocommerce/templatessingle-product/add-to-cart/simple.php, и вместо блока form запихнуть блок table из вашего кода.
Новый шаблон переместить в папку с темой.
 

cooledit

Новичок
#4
OK попробую. Нужна помощь в таком функционале: wysiwyg - редактор для кастомного поля с выводом в кастом таб на странице продукта. поучилось сделать с textarea, но хочется расширенный редактор. пробовал с использованием wp-editor, результат не сохраняется.
Кто-нибудь делал такое?
 

Stork.71

Гуру
Местный
#5
а кастомные поля HTML поддерживают вообще?
попробуйте чета написать в обычном wysiwyg редакторе, а потом код скопипастить в поле.
 

cooledit

Новичок
#6
поддерживают и HTML и скрипты.... Когда надо сделать один пост подойдет и такое поле, а когда постить много - особенно, если участвуют таблицы - ... вообщем вы поняли....))
 

cooledit

Новичок
#7
симпотичный кодик :)
по ошибке ничего не подскажу: не программер. Хотя помнится частенько у народа возникали проблемы с выводом slug'a вместо названия свойств. Поищите по форуму, может найдете.
Чтобы сделать обычный товар тоже с табличкой, попробуйте найти файлик woocommerce/templatessingle-product/add-to-cart/simple.php, и вместо блока form запихнуть блок table из вашего кода.
Новый шаблон переместить в папку с темой.
Не получается вставить таблицу в указанный файлик, да и непонятно как это сделать. Может все таки есть программисты или люди которые делали подобное. Непонятно что именно надо вставлять в таблицу....
 

cooledit

Новичок
#9
Решение пока не найдено, может все таки кто-нибудь из знающих встречал как можно в таблицу вставить данные которые меня интересуют?
 

svens

Форумчанин
#10
Здравствуйте не нашли ответ на Ваш вопрос?? Я столкнулся с той же проблемой, ищу решение)
 

svens

Форумчанин
#12
А вот Ваш код вариативного товара в виде таблиц куда нужно ставить, мне вот как раз и нужна таблица с товаром.
 

svens

Форумчанин
#14
Попробуйте вставить в function.php вашей темы...;)
Хух разобрался, выдавало мне ошибку пока не удалил строчку
"find_valid_variations loops through your product variations and fills in the ‘anys’"
Вариативный товар теперь выводит таблицей, но как можно сделать чтоб не заходя в описание самого товара под товаром выводились варианты покупки товара а не как обычно цена с и до.???
 

moonkir

Новичок
#15
Код хороший, дополню его
что бы вместо слага выводилось имя:
добавляем функцию

PHP:
    function attribute_slug_to_title( $attribute ,$slug ) {
        global $woocommerce;
        if ( taxonomy_exists( esc_attr( str_replace( 'attribute_', '', $attribute ) ) ) ) {
            $term = get_term_by( 'slug', $slug, esc_attr( str_replace( 'attribute_', '', $attribute ) ) );
            if ( ! is_wp_error( $term ) && $term->name )
                $value = $term->name;
        } else {
            $value = apply_filters( 'woocommerce_variation_option_name', $value );
        }
        return $value;
    }
Это:
PHP:
<?php foreach($value['attributes'] as $key => $val ) {
                        $val = str_replace(array('-','_'), ' ', $val);
                        printf( '<span class="attr attr-%s">%s</span>', $key, ucwords($val) );
                    } ?>
за менить на:
PHP:
<?php foreach ($value['attributes'] as $att => $slg) { echo attribute_slug_to_title($att, $slg); } ?>
 

moonkir

Новичок
#17
не может быть хорошим код, написанный 3 года назад, для сильно устаревших версий ВП и ВУУ
У вас есть шанс это исправить и переписать все ;)
Использовал этот код за основу - костяк там полностью рабочий

BD.PNG
 
Последнее редактирование:

tuxfighter

Гуру
Местный
#18
у меня есть шанс не заниматься глупостями и не использовать всякие посторонние "коды", которые к тому же уже и устарели.
Для этого существуют постоянно обновляемые плагины.
 
Сверху Снизу