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

Решено Собственный шорткод цены

Тема в разделе "Вопросы, советы и доработки.", создана пользователем Stork.71, 14 ноя 2014.

  1. Stork.71

    Stork.71 Местный

    Сообщения:
    1.046
    Симпатии:
    255
    Баллы:
    83
    Придумалась мне интересная штука. Захотелось реализовать для товара таблицу модификаций (вариантов) в тексте описания товара. В нее хочется вставить цену. Но хочется сделать это не просто вписав циферки, а автоматизировав процесс, чтобы в случае изменения цены товара поменялась и эта цена в табличке.
    Думаю, красиво, цивильно было бы, чтобы можно было просто вставить в текст описания какой-нибудь шорткод типа [product_price id="000" sku="000"] , который бы все делал дальше за нас, а нам оставалось только вписать нужный id или артикул. На выходе нужен просто кусок текста. Оформить это и вручную можно (цвет, размер и т.д.). Хотя в идеале...
    Только вот для этого надо как-то добавить такой шорткод в движок. Как это сделать, кто знает?
     
  2. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    553
    Баллы:
    113
    Пример шорткода вывода цены товара по id товара, т.е. [product_price id="99"]
    Цена выводиться с учетом скидки (перечеркнутая и действующая), т.е. также как в "карточке" товара.

    Вставляем следующий код в functions.php своей темы.
    PHP:
    function price_shortcode_callback$atts ) {
        
    $atts shortcode_atts( array(
            
    'id' => null,
        ), 
    $atts'bartag' );

        
    $html '';

        if( 
    intval$atts['id'] ) > && function_exists'wc_get_product' ) ){
             
    $_product wc_get_product$atts['id'] );
             
    $html $_product->get_price_html();
        }
        return 
    $html;
    }
    add_shortcode'product_price''price_shortcode_callback' );
     
    Последнее редактирование: 6 июл 2015
    • Нравится Нравится x 2
  3. Stork.71

    Stork.71 Местный

    Сообщения:
    1.046
    Симпатии:
    255
    Баллы:
    83
    Спасибо большое, вроде работает!
    Вопрос по доработке этого кода. Очень хотелось бы в некоторых случаях не выводить зачеркнутую цену до скидки - есть необходимость использовать шорткод в таблицах наподобие прайса, и там лишние цифры перечеркнутые совершенно ни к чему.
    Можно ли добавить какой-нибудь аргумент к шорткоду, который по умолчанию будет "no", но можно прописать вручную 'yes', чтобы цена выводилась с учетом старой перечеркнутой (доскидочной).
    например:
    [product_price id="99"] или [product_price id="99" bsprice="no"] - если есть только обычная цена, то выводится обычная цена; если есть цена со скидкой, то выводится только цена со скидкой.
    [product_price id="99" bsprice="yes"] - если есть только обычная цена, то выводится обычная цена; если есть цена со скидкой, то выводится перечеркнутая обычная цена и актуальная цена со скидкой.
    Ну суть такая, но там уж как лучше логику сделать - на no или yes.
     
    Последнее редактирование: 27 июл 2015
  4. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    553
    Баллы:
    113
    Поправил шорткод.
    [product_price id="72" old_price="yes"] - вывести с перечеркнутой ценой
    [product_price id="72"] - вывести без перечеркнутой цены
    PHP:
    // шорткод [product_price id="ID_product" old_price="no/yes"]
    // id - обязательный атрибут ID товара
    // old_price - "no" (по умолчанию) : не выводить старую цену, "yes" : выводить старую перечеркнутую цену
    function price_shortcode_callback$atts ) {
        
    $atts shortcode_atts( array(
            
    'id' => null,
            
    'old_price' => "no"
        
    ), $atts'bartag' );

        
    $html '';

        if( 
    intval$atts['id'] ) > && function_exists'wc_get_product' ) ){
             
    $_product wc_get_product$atts['id'] );
             if (
    $atts['old_price'] == 'yes')
                 
    $html $_product->get_price_html();
             else
                 
    $html wc_price($_product->get_price());
        }
        return 
    $html;
    }
    add_shortcode'product_price''price_shortcode_callback' );
     
  5. vipsite

    vipsite

    Сообщения:
    29
    Симпатии:
    23
    Баллы:
    8
    А никто не знает как например можно вставить шорткод цены под миниатюрой категории, например есть сайт у которого категория это товар, а товары это цвета/оттенки, вот пример http://frilanser.pp.ua/category/dekorativnaya-kosmetika/blesk-dlya-gub так вот можно под миниатюрой разместить цену (она у всех товаров цветов/оттенков одинаковая)?

    Я так понимаю реализуется это по такому алгоритму: "ищем любой товар для категории", "и потом прописуем его через переменную в шорт код".. Только вот как бы это сделать по проще и не сильно громоздко...

    Есть у кого идеи?
     
  6. vipsite

    vipsite

    Сообщения:
    29
    Симпатии:
    23
    Баллы:
    8
    Вот разместил тут /тема_шаблон/woocommerce/content-product_cat.php и решил сделать так:
    PHP:
    <?php

        $args 
    = array(
            
    'posts_per_page'=>-1,
            
    'post_type'=>'product',
            
    'orderby'=>'meta_value_num',
            
    'order'=>'DESC',
            
    'tax_query'=> array(
                array(
                    
    'taxonomy'=>'product_cat',
                    
    'field'=>'slug',
                    
    'terms'=> $category,
                    
    'operator'=>'IN'
                
    )
            ),
            
    'meta_query'=> array(
                array(
                    
    'key'=>'_price',
                )
            )    
        );


        
    $loop =new WP_Query($args);

        echo 
    "Цена товаров в категории :" get_post_meta($loop->posts[0]->ID,'_price',true);
    ?>
    Но к сожалению НЕ РАБОТАЕТ , что не так? может кто подсказать?
     
    Последнее редактирование: 28 янв 2016
  7. vipsite

    vipsite

    Сообщения:
    29
    Симпатии:
    23
    Баллы:
    8
    Вот смог вывести только таким кАстыльным методом(((
    PHP:
    <?php
        $theCatId 
    get_term_by'slug'$category->slug'product_cat' );
        
    $theCatId $theCatId->term_id;

        if(
    $theCatId == 39) {
        echo 
    do_shortcode('[product_price id="1061"]');
        }
        if(
    $theCatId == 40) {
        echo 
    do_shortcode('[product_price id="1073"]');
        }
        if(
    $theCatId == 41) {
        echo 
    do_shortcode('[product_price id="1089"]');
        }
        if(
    $theCatId == 42) {
        echo 
    do_shortcode('[product_price id="1103"]');
        }
        if(
    $theCatId == 43) {
        echo 
    do_shortcode('[product_price id="1107"]');
        }
        if(
    $theCatId == 44) {
        echo 
    do_shortcode('[product_price id="1241"]');
        }
        if(
    $theCatId == 45) {
        echo 
    do_shortcode('[product_price id="1291"]');
        }
        if(
    $theCatId == 46) {
        echo 
    do_shortcode('[product_price id="1297"]');
        }
        if(
    $theCatId == 47) {
        echo 
    do_shortcode('[product_price id="1419"]');
        }
        
    ?>
    но вот теперь бы доработать, а именно все сделать так чтобы в [product_price id="1419"] значение ID товара формировалось исходя из ID категории этого продукта..

    я так понимаю надо вытянуть массив ID'шников товаров категории, и из этого массива например взять первое значение.. может у кого есть по лучше решение???

    Аууу!!! Что-то все спят, хоть скажите что-то...((
     
  8. g-o-d

    g-o-d

    Сообщения:
    4
    Симпатии:
    1
    Баллы:
    3
    Отлично работает. А можно ли сделать так чтобы не зачеркнутая цена была, допустим, красного цвета и без подчеркивания? (Как ни пытался прописывать стили, везде цвета меняются, а вот там где поставил цену с помощью этого кода и шорткода - не меняется)
     
  9. g-o-d

    g-o-d

    Сообщения:
    4
    Симпатии:
    1
    Баллы:
    3
    Всё, решение найдено. Надо в стили темы добавить вот такой код:
    ins {
    font-size: 34px;
    color: red;
    text-decoration: none;
    }
     
    • Нравится Нравится x 1