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

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

Image CMS

D&B

Администратор
Команда форума
Местный
#1
Подборка сниппетов-кодов от популярного, западного 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);
Вторая часть тут
 
Последнее редактирование:

zelart

Новичок
#6
если не затруднит, объясните как поменять в woocommerce текст кнопки Распродажа на свой текст
 

den1984

Новичок
#8
Народ, а подскажите такой момент: вот я добавил код для определения минимальной суммы в корзине. Выводится он по-английски. Как и куда через POedit нужно впихнуть перевод этой фразы?
 

den1984

Новичок
#10
Менял, вылезают кракозябры. Пишит мол несоответствие типов данных. Но все равно спасибо, что ответили. сейчас еще раз внимательно все проверю
 

Stork.71

Гуру
Местный
#12
Меняем вкладку "Дополнительная информация" на "технические характеристики" на странице товара. Первый кусок - надпись на вкладке, второй - заголовок перед текстом при активной вкладке.
Код:
/**
* Меняем вкладку "Дополнительная информация" на "Технические характеристики" на странице товара
**/
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!
}
 

damag0

Новичок
#13
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 ) );
    }
}
Помогите разобраться с этим кодом. Очень нужен этот снипет. Вставляю его, после чего белый экран. убираю все работает.
 

raintug

Новичок
#14
22. Установить минимальную сумму заказа
Помогите разобраться с этим кодом. Очень нужен этот снипет. Вставляю его, после чего белый экран. убираю все работает.
Этот сниппет для версии 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'
            );

        }
    }

}
 

Kirill8

Новичок
#15
Этот сниппет для версии 2.0.x
Для последних версий:

....
Огромное спасибо за актуализацию сниппета!
Подскажите как изменить код, чтобы не учитывалась сумма доставки, т.е действовало условие минимальной суммы только по товарам?
 

novov

Форумчанин
#18
Подскажите пожалуйста как сделать минимальное кол-во в заказе, а не сумму заказа? Спасибо!
 

D&B

Администратор
Команда форума
Местный
#19
Какое отношение имеет сумма к минимальному количеству? Формулируйте вопрос понятнее.
 

novov

Форумчанин
#20
Ну есть сниппет 22. Установить минимальную сумму заказа.
Мне необходимо в корзине фиксить общее минимальное кол-во. Например меньше 10 шт. не продадим, т.к. минимальное кол-во заказа 15 шт. Спасибо!
 
Сверху Снизу