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

50 полезных сниппетов для WooCommerce. Часть первая.

Тема в разделе "WooCommerce - основы, описания, уроки.", создана пользователем D&B, 15 янв 2014.

  1. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.273
    Симпатии:
    724
    Баллы:
    113
    Подборка сниппетов-кодов от популярного, западного WP разработчика множества WooCommerce плагинов - Remi

    [h2]Первая часть из 25 WooCommerce сниппетов:[/h2]
    1. Добавить способ оплаты в админ-email woocommerce
    Код:
    add_action( 'woocommerce_email_after_order_table', 'add_payment_method_to_admin_new_order', 15, 2 );
    function add_payment_method_to_admin_new_order( $order, $is_admin_email ) {
      if ( $is_admin_email ) {
        echo '<p><strong>Payment Method:</strong> ' . $order->payment_method_title . '</p>';
      }
    }
    2. Дополнительные товары на странице/в ряду
    Код:
    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
    add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_upsells', 15 );
    if ( ! function_exists( 'woocommerce_output_upsells' ) ) {
        function woocommerce_output_upsells() {
            woocommerce_upsell_display( 3,3 ); // Display 3 products in rows of 3
        }
    }
    3. Удаление товарной категории с главной страницы магазина
    Код:
    add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
    
    function custom_pre_get_posts_query( $q ) {
        if ( ! $q->is_main_query() ) return;
        if ( ! $q->is_post_type_archive() ) return;
      
        if ( ! is_admin() && is_shop() && ! is_user_logged_in() ) {
            $q->set( 'tax_query', array(array(
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => array( 'color', 'flavor', 'spices', 'vanilla' ), // Don't display products in these categories on the shop page
                'operator' => 'NOT IN'
            )));
      
        }
        remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
    }
    4. Быстрый перевод любого ярлыка-ценника
    Код:
    add_filter('gettext',  'translate_text');
    add_filter('ngettext',  'translate_text');
    function translate_text($translated) {
         $translated = str_ireplace('Choose and option',  'Select',  $translated);
         return $translated;
    }
    5. Исключить категорию из виджета woocommerce -категории
    Код:
    add_filter( 'woocommerce_product_categories_widget_args', 'woo_product_cat_widget_args' );
    
    function woo_product_cat_widget_args( $cat_args ) {
      
        $cat_args['exclude'] = array('16');
      
        return $cat_args;
    }
    6. Добавить произвольное поле во вкладку «вариативный товар»
    Код:
    //Display Fields
    add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );
    //JS to add fields for new variations
    add_action( 'woocommerce_product_after_variable_attributes_js', 'variable_fields_js' );
    //Save variation fields
    add_action( 'woocommerce_process_product_meta_variable', 'variable_fields_process', 10, 1 );
    function variable_fields( $loop, $variation_data ) {
    ?>  
        <tr>
            <td>
                <div>
                        <label></label>
                        <input type="text" size="5" name="my_custom_field[]" value=""/>
                </div>
            </td>
        </tr>
    
    <tr>
            <td>
                <div>
                        <label></label>
                      
                </div>
            </td>
        </tr>
    <?php
    }
    function variable_fields_process( $post_id ) {
        if (isset( $_POST['variable_sku'] ) ) :
            $variable_sku = $_POST['variable_sku'];
            $variable_post_id = $_POST['variable_post_id'];
            $variable_custom_field = $_POST['my_custom_field'];
            for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
                $variation_id = (int) $variable_post_id[$i];
                if ( isset( $variable_custom_field[$i] ) ) {
                    update_post_meta( $variation_id, '_my_custom_field', stripslashes( $variable_custom_field[$i] ) );
                }
            endfor;
        endif;
    }
    7. Заменить «Товар отсутствует» на «Продано»
    Код:
    add_filter('woocommerce_get_availability', 'availability_filter_func');
    
    function availability_filter_func($availability)
    {
        $availability['availability'] = str_ireplace('Out of stock', 'Sold', $availability['availability']);
        return $availability;
    }
    8. Отображать «товар уже в корзине» вместо кнопки «добавить в корзину». Изменить текст «добавить в корзину» на странице товара.
    Код:
    /**
    * Change the add to cart text on single product pages
    */
    add_filter('single_add_to_cart_text', 'woo_custom_cart_button_text');
    
    function woo_custom_cart_button_text() {
    
        global $woocommerce;
      
        foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
            $_product = $values['data'];
      
            if( get_the_ID() == $_product->id ) {
                return __('Already in cart - Add Again?', 'woocommerce');
            }
        }
      
        return __('Add to cart', 'woocommerce');
    }
    
    /**
    * Change the add to cart text on product archives
    */
    add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );
    
    function woo_archive_custom_cart_button_text() {
    
        global $woocommerce;
      
        foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
            $_product = $values['data'];
      
            if( get_the_ID() == $_product->id ) {
                return __('Already in cart', 'woocommerce');
            }
        }
      
        return __('Add to cart', 'woocommerce');
    }
    9. Скрыть количество товара в выводимых категориях
    Код:
    add_filter( 'woocommerce_subcategory_count_html', 'woo_remove_category_products_count' );
    
    function woo_remove_category_products_count() {
        return;
    }
    10. Сделать поля для регистрации при оформлении заказа обязательными для заполнения
    Код:
    add_filter( 'woocommerce_checkout_fields', 'woo_filter_account_checkout_fields' );
    function woo_filter_account_checkout_fields( $fields ) {
        $fields['account']['account_username']['required'] = true;
        $fields['account']['account_password']['required'] = true;
        $fields['account']['account_password-2']['required'] = true;
    
        return $fields;
    }
    11. Переименовать какую-либо вкладку на странице «Добавить товар»
    Код:
    add_filter( 'woocommerce_product_tabs', 'woo_rename_tab', 98);
    function woo_rename_tab($tabs) {
    
    $tabs['description']['title'] = 'More info';
    
    return $tabs;
    }
    12. Вывести список категорий товаров woocommerce
    Код:
    $args = array(
        'number'     => $number,
        'orderby'    => $orderby,
        'order'      => $order,
        'hide_empty' => $hide_empty,
        'include'    => $ids
    );
    
    $product_categories = get_terms( 'product_cat', $args );
    
    $count = count($product_categories);
    if ( $count > 0 ){
         echo "<ul>";
         foreach ( $product_categories as $product_category ) {
           echo '<li><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</li>';
          
         }
         echo "</ul>";
    }
    13. Заменить заголовок главной страницы магазина
    Код:
    add_filter( 'woocommerce_page_title', 'woo_shop_page_title');
    
    function woo_shop_page_title( $page_title ) {
      
        if( 'Shop' == $page_title) {
            return "My new title";
        }
    }
    14. Изменить заголовок виджета
    Код:
    /*
    * Change widget title
    */
    add_filter( 'widget_title', 'woo_widget_title', 10, 3);
    
    function woo_widget_title( $title, $instance, $id_base ) {
      
        if( 'onsale' == $id_base) {
            return "My new title";
        }
    }
    15. Удалить дефолтные установки woocommerce
    Код:
    add_filter( 'woocommerce_catalog_settings', 'woo_remove_catalog_options' );
    
    function woo_remove_catalog_options( $catalog ) {
    
        unset($catalog[23]); //Trim zeros (no)
        unset($catalog[22]); //2 decimals
        unset($catalog[21]); //decimal sep (.)
        unset($catalog[20]); //thousand sep (,)
        unset($catalog[19]); //currency position (left)  
        unset($catalog[18]); //currency position (left)  
        unset($catalog[5]); // ajax add to cart (no)  
      
        return $catalog;
    }
    16. Изменить электронный адрес отправителя в поле «от кого»
    Код:
    function woo_custom_wp_mail_from() {
            global $woocommerce;
            return html_entity_decode( 'your@email.com' );
    }
    add_filter( 
    17. Убрать код из имени в строке «От кого» в электронном сообщении woocommerce
    Код:
    function woo_custom_wp_mail_from_name() {
            global $woocommerce;
            return html_entity_decode( get_option( 'woocommerce_email_from_name' ) );
    }
    add_filter( 'wp_mail_from_name', 'woo_custom_wp_mail_from_name', 99 );
    
    function woo_custom_wp_mail_from() {
            global $woocommerce;
            return html_entity_decode( get_option( 'woocommerce_email_from' ) );
    }
    add_filter( 'wp_mail_from_name', 'woo_custom_wp_mail_from_name', 99 );
    18. Вернуть колонку, в которой отображаются ID рекомендуемых товаров
    Код:
    function woo_get_featured_product_ids() {
        // Load from cache
        $featured_product_ids = get_transient( 'wc_featured_products' );
    
        // Valid cache found
        if ( false !== $featured_product_ids )
            return $featured_product_ids;
    
        $featured = get_posts( array(
            'post_type'      => array( 'product', 'product_variation' ),
            'posts_per_page' => -1,
            'post_status'    => 'publish',
            'meta_query'     => array(
                array(
                    'key'         => '_visibility',
                    'value'     => array('catalog', 'visible'),
                    'compare'     => 'IN'
                ),
                array(
                    'key'     => '_featured',
                    'value' => 'yes'
                )
            ),
            'fields' => 'id=>parent'
        ) );
    
        $product_ids = array_keys( $featured );
        $parent_ids  = array_values( $featured );
        $featured_product_ids = array_unique( array_merge( $product_ids, $parent_ids ) );
    
        set_transient( 'wc_featured_products', $featured_product_ids );
    
        return $featured_product_ids;
    }
    19. Добавить произвольное поле на страницу редактирования адреса
    Код:
    // add fields to edit address page
    function woo_add_edit_address_fields( $fields ) {
    
        $new_fields = array(
                    'date_of_birth'     => array(
                    'label'             => __( 'Date of birth', 'woocommerce' ),
                    'required'          => false,
                    'class'             => array( 'form-row' ),
                ),
            );
          
        $fields = array_merge( $fields, $new_fields );
      
        return $fields;
      
    }
    
    add_filter( 'woocommerce_default_address_fields', 'woo_add_edit_address_fields' );
    20. Отображать шорткод для товаров, которые в каталоге выставлены на распродажу
    Код:
    function woocommerce_sale_products( $atts ) {
    
        global $woocommerce_loop;
    
        extract(shortcode_atts(array(
            'per_page'  => '12',
            'columns'   => '4',
            'orderby' => 'date',
            'order' => 'desc'
        ), $atts));
    
        $woocommerce_loop['columns'] = $columns;
    
        $args = array(
            'post_type' => 'product',
            'post_status' => 'publish',
            'ignore_sticky_posts'   => 1,
            'posts_per_page' => $per_page,
            'orderby' => $orderby,
            'order' => $order,
            'meta_query' => array(
                array(
                    'key' => '_visibility',
                    'value' => array('catalog', 'visible'),
                    'compare' => 'IN'
                ),
                array(
                    'key' => '_sale_price',
                    'value' =>  0,
                    'compare'   => '>',
                    'type'      => 'NUMERIC'
                )
            )
        );
        query_posts($args);
        ob_start();
        woocommerce_get_template_part( 'loop', 'shop' );
        wp_reset_query();
    
        return ob_get_clean();
    }
    
    add_shortcode('sale_products', 'woocommerce_sale_products');
    21. Товары, выставленные на распродажу
    Код:
    function woo_have_onsale_products() {
      
        global $woocommerce;
    
        // Get products on sale
        $product_ids_on_sale = array_filter( woocommerce_get_product_ids_on_sale() );
    
        if( !empty( $product_ids_on_sale ) ) {
            return true;
        } else {
            return false;
        }
      
    }
    
    // Example:
    if( woo_have_onsale_products() ) {
        echo 'have onsale products';
    } else {
        echo 'no onsale product';
    }
    22. Установить минимальную сумму заказа
    Код:
    add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
    function wc_minimum_order_amount() {
        global $woocommerce;
        $minimum = 50;
        if ( $woocommerce->cart->get_cart_total(); < $minimum ) {
               $woocommerce->add_error( sprintf( 'You must have an order with a minimum of %s to place your order.' , $minimum ) );
        }
    }
    23. Сортировать товары на главной странице магазина по цене, дате поступления или названию
    Код:
    add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');
    function custom_default_catalog_orderby() {
         return 'date'; // Can also use title and price
    }
    24. Перенаправление на страницу оформления заказа после нажатия кнопки «добавить в корзину»
    Код:
    add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
    
    function redirect_to_checkout() {
        global $woocommerce;
        $checkout_url = $woocommerce->cart->get_checkout_url();
        return $checkout_url;
    }
    25. Пересылать копию электронного сообщения реципиенту после того, как заказ оформлен
    Код:
    function woo_extra_email_recipient($recipient, $object) {
        $recipient = $recipient . ', your@email.com';
        return $recipient;
    }
    add_filter( 'woocommerce_email_recipient_customer_completed_order', 'woo_extra_email_recipient', 10, 2);
    Вторая часть тут
     
    Последнее редактирование: 20 янв 2014
    • Нравится Нравится x 5
    • Полезно Полезно x 1
  2. ya.zkp

    ya.zkp

    Сообщения:
    41
    Симпатии:
    17
    Баллы:
    8
    подозреваю, но все же спрошу, это мы function.php редактируем?
     
    • Нравится Нравится x 2
  3. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.273
    Симпатии:
    724
    Баллы:
    113
    Да, разумеется
     
    • Согласен Согласен x 1
  4. warzoni

    warzoni

    Сообщения:
    29
    Симпатии:
    1
    Баллы:
    1
    а в function.php в любое место коды вставлять?
     
    • Нравится Нравится x 1
  5. rikitiki

    rikitiki Местный

    Сообщения:
    750
    Симпатии:
    185
    Баллы:
    43
    Не критично, но лучше внизу.
     
  6. zelart

    zelart

    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    если не затруднит, объясните как поменять в woocommerce текст кнопки Распродажа на свой текст
     
  7. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.273
    Симпатии:
    724
    Баллы:
    113
    Вам в этот раздел.
     
  8. den1984

    den1984

    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Народ, а подскажите такой момент: вот я добавил код для определения минимальной суммы в корзине. Выводится он по-английски. Как и куда через POedit нужно впихнуть перевод этой фразы?
     
  9. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.273
    Симпатии:
    724
    Баллы:
    113
    Видимо прямо в этом коде и меняйте. При чем тут POEDIT?
     
    • Нравится Нравится x 1
  10. den1984

    den1984

    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Менял, вылезают кракозябры. Пишит мол несоответствие типов данных. Но все равно спасибо, что ответили. сейчас еще раз внимательно все проверю
     
  11. amoresperros

    amoresperros Moderator Команда форума Местный

    Сообщения:
    92
    Симпатии:
    9
    Баллы:
    8
    Проверьте кодировку.
     
  12. Stork.71

    Stork.71 Местный

    Сообщения:
    1.043
    Симпатии:
    254
    Баллы:
    83
    Меняем вкладку "Дополнительная информация" на "технические характеристики" на странице товара. Первый кусок - надпись на вкладке, второй - заголовок перед текстом при активной вкладке.
    Код:
    /**
    * Меняем вкладку "Дополнительная информация" на "Технические характеристики" на странице товара
    **/
    add_filter ( 'woocommerce_product_additional_information_tab_title', 'custom_product_additional_information_tab_title' ) ;
    function custom_product_additional_information_tab_title() {
    return 'Технические характеристики'; // Change Me!
    }
    add_filter ( 'woocommerce_product_additional_information_heading', 'custom_product_additional_information_heading' ) ;
    function custom_product_additional_information_heading() {
    return 'Технические характеристики'; // Change Me!
    }
    
     
    • Согласен Согласен x 1
  13. damag0

    damag0

    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    22. Установить минимальную сумму заказа
    Код:
    Код:
    add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
    function wc_minimum_order_amount() {
        global $woocommerce;
        $minimum = 50;
        if ( $woocommerce->cart->get_cart_total(); < $minimum ) {
               $woocommerce->add_error( sprintf( 'You must have an order with a minimum of %s to place your order.' , $minimum ) );
        }
    }
    
    Помогите разобраться с этим кодом. Очень нужен этот снипет. Вставляю его, после чего белый экран. убираю все работает.
     
  14. raintug

    raintug

    Сообщения:
    5
    Симпатии:
    2
    Баллы:
    3
    Этот сниппет для версии 2.0.x
    Для последних версий:

    Код:
    add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
    add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );
    function wc_minimum_order_amount() {
        // Set this variable to specify a minimum order value
        $minimum = 50;
    
        if ( WC()->cart->total < $minimum ) {
    
            if( is_cart() ) {
    
                wc_print_notice(
                    sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' ,
                        woocommerce_price( $minimum ),
                        woocommerce_price( WC()->cart->total )
                    ), 'error'
                );
    
            } else {
    
                wc_add_notice(
                    sprintf( 'You must have an order with a minimum of %s to place your order, your current order total is %s.' ,
                        woocommerce_price( $minimum ),
                        woocommerce_price( WC()->cart->total )
                    ), 'error'
                );
    
            }
        }
    
    }
     
    • Нравится Нравится x 2
  15. Kirill8

    Kirill8

    Сообщения:
    23
    Симпатии:
    2
    Баллы:
    3
    Огромное спасибо за актуализацию сниппета!
    Подскажите как изменить код, чтобы не учитывалась сумма доставки, т.е действовало условие минимальной суммы только по товарам?
     
  16. Юрий Николаевич

    Юрий Николаевич

    Сообщения:
    145
    Симпатии:
    3
    Баллы:
    18
    Вечер добрый !Пытаюсь убрать категорию . согласно приведенного кода без изменений. Или для сегодняшней версии , что то другое .
     
  17. NoSPam

    NoSPam

    Сообщения:
    18
    Симпатии:
    1
    Баллы:
    3
    картинкой бы хоть показывали результат манипуляций
     
  18. novov

    novov

    Сообщения:
    34
    Симпатии:
    1
    Баллы:
    8
    Подскажите пожалуйста как сделать минимальное кол-во в заказе, а не сумму заказа? Спасибо!
     
  19. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.273
    Симпатии:
    724
    Баллы:
    113
    Какое отношение имеет сумма к минимальному количеству? Формулируйте вопрос понятнее.
     
  20. novov

    novov

    Сообщения:
    34
    Симпатии:
    1
    Баллы:
    8
    Ну есть сниппет 22. Установить минимальную сумму заказа.
    Мне необходимо в корзине фиксить общее минимальное кол-во. Например меньше 10 шт. не продадим, т.к. минимальное кол-во заказа 15 шт. Спасибо!