Пачка полезных сниппетов для WooCommerce. Часть 10

Выводим название товара напротив заказа в личном кабинете в WooCommerce

Для того, чтобы на странице Заказы в Личном кабинете покупателя в таблице вывести в ячейке название товара, необходимо добавить следующий код в файл functions.php:

// WC 2.6.4: Добавить новую колонку с товарами на странице заказов в личном кабинете
//1. Добавляем колонку после колонки с суммой заказа
add_filter( 'woocommerce_account_orders_columns', 'my_column_product');
function my_column_product($columns) {
    $new_columns = array();
    foreach ($columns as $key => $value) {
        $new_columns[$key] = $value;
        if ($key == 'order-total' ) $new_columns['order-products'] = "Товары";
    }
    return $new_columns;
}
// 2. Заполняем колонку "Товары"
add_action( 'woocommerce_my_account_my_orders_column_order-products', 'get_column_order_product');
function get_column_order_product($order) {
    foreach( $order->get_items() as $item_id => $item ) {
        $product = $order->get_product_from_item( $item );
        $product_permalink = $product->get_permalink( $item );
        echo sprintf( '<a href="%s">%s</a>', $product_permalink, $item['name'] );
        echo ' <strong class="product-quantity">' . sprintf( '&times; %s', $item['qty'] ) . '</strong>';
    }
}

В результате добавлена колонка «Товары» (см.скриншот).

download

Как добавить имя покупателя в тему письма о новом заказе для администратора магазина

Следующий код поможет вам добавить имя и фамилию покупателя в письмо для администратора о новом размещенном в вашем магазине заказе. Код вставляем в файл functions.php.

function skyverge_add_customer_to_email_subject( $subject, $order ) {

    $subject .= ' from ' . $order->billing_first_name . ' ' . $order->billing_last_name;
    return $subject;

}
add_filter( 'woocommerce_email_subject_new_order', 'skyverge_add_customer_to_email_subject', 10, 2 );

Как изменить мета описание alt и title для миниатюр в магазине WooCommerce

Для того, чтобы автоматически указывать мета описания alt и title для картинок товаров можно воспользоваться следующим кодом, добавив его в functions.php темы.
В качестве атрибутов будет добавлено название товара.

add_filter('wp_get_attachment_image_attributes', 'change_attachement_image_attributes', 20, 2);
function change_attachement_image_attributes($attr, $attachment) {
    global $post;
    if ($post->post_type == 'product') {
        $title = $post->post_title;
        $attr['alt'] = $title;
        $attr['title'] = $title;
    }
    return $attr;
}

Как убрать строку Подитог в WooCommerce

Для того, чтобы избавиться от чаще всего бесполезной строчки Подитог, необходимо добавить следующий код в файл functions.php.

add_filter( 'woocommerce_get_order_item_totals', 'adjust_woocommerce_get_order_item_totals' );

function adjust_woocommerce_get_order_item_totals( $totals ) {
  unset($totals['cart_subtotal']  );
  return $totals;
}

Как открывать ссылки для внешнего товара в новом окне в WooCommerce

Для того, чтобы из каталога ссылка для внешнего товара открывалась в новом окне вставьте в functions.php своей темы следующий код:

function my_woocommerce_loop_add_to_cart_link($link,$product) {
    if( $product->is_type( 'external' ) ) {
        $link = str_replace('<a ', '<a target="_blank" ', $link);
        return $link;
    }
    return $link;
}
add_filter( "woocommerce_loop_add_to_cart_link", "my_woocommerce_loop_add_to_cart_link", 10, 2);

Как добавить сортировку товаров по наличию в магазине

Для того, чтобы добавить дополнительную сортировку товаров по наличию в магазине, вставляем следующий код в файл functions.php.

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );

function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

if ( 'stock_list_asc' == $orderby_value ) {
    $args['orderby'] = 'meta_value_num wp_posts.ID';
    $args['order'] = 'ASC';
    $args['meta_key'] = '_stock';
}
elseif ( 'stock_list_desc' == $orderby_value ) {
    $args['orderby'] = 'meta_value_num wp_posts.ID';
    $args['order'] = 'DESC';
    $args['meta_key'] = '_stock';
}

return $args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );

function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['stock_list_desc'] = 'Остаток: по убыванию';
$sortby['stock_list_asc'] = 'Остаток: по возрастанию';
return $sortby;
}

В итоге результат будет выглядеть примерно так:

а. В админке появились 2 пункта сортировки. Можно выбрать нужный пункт по умолчанию.
download2
б. В публичной части появились 2 новых пункта сортировки.
download3

VN:F [1.9.22_1171]
Rating: 3.7/5 (3 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Denis Z

    День добрый. Строка «Подытог» не исчезает при вставке указанного кода. При этом код для отображения названия товара работает, то есть вставляю правильно.
    WooCommerce 2.6.9., WordPress 4.7, php 5.4.45

Scroll To Top