В данной статье мы рассмотри различные сниппеты для Woocommerce . Woocommerce — это лучший плагин для интернет-магазинов на WordPress. Данная статья будет пополняться, поэтому рекомендую добавить ее в закладки. Так же предлагайте свои сниппеты или более лучшие решения.
Работа с категориями
//отображать категории в которых нет товаров
add_filter( 'woocommerce_product_subcategories_hide_empty', function() { return false; }, 10, 1 );
/*вывести описание категорий в списке категорий*/
add_action( 'woocommerce_after_subcategory_title', 'custom_add_product_description', 12);
function custom_add_product_description ($category) {
$cat_id = $category->term_id;
$prod_term = get_term($cat_id,'product_cat');
$description= $prod_term->description;
$description = strip_tags($description);
$description = substr($description, 0, 250);
$description = rtrim($description, "!,.-");
$description = substr($description, 0, strrpos($description, ' '));
echo '
<div class="woocommerce-loop-category__description">'.$description."… ".'</div>
'; } /*вывод описание товара в самой категории*/ add_action( 'woocommerce_after_shop_loop_item_title', 'my_add_short_description', 9 ); function my_add_short_description() { echo '
<div class="description-tovar">' , the_excerpt() ,'</div>
'; }
Работа с атрибутами
/*выводит определенные атрибуты в списке товаров*/
add_action( 'woocommerce_after_shop_loop_item', 'custom_add_product_atribut', 12);
function custom_add_product_atribut ($category) {
global $product;
if($product->get_attribute('long') == true)
{echo '<div class="atrebut">Длина стрелы '.$product->get_attribute('long')."</div>";}
}
/*Как в карточке товара woocommerce вывести отображение строки в наличии/не в наличии?
В шаблоне карточки надо добавить скприт. У себя на сайте разместил в шаблоне content-single-product.php*/
if (get_post_meta(get_the_ID(), '_stock_status', true) == 'outofstock') {
echo '<div class="outofstock">Нет в наличии</div>';
} else {
echo '<div class="stock">В наличии</div>';
}
/*
свои статусы остатка*/
function add_custom_stock_type() {
?>
<script type="text/javascript">
jQuery(function(){
jQuery('._stock_status_field').not('.custom-stock-status').remove();
});
</script>
<?php
woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
'instock' => __( 'In stock', 'woocommerce' ),
'outofstock' => __( 'Out of stock', 'woocommerce' ),
'onrequest' => __( 'под заказ', 'woocommerce' ), // The new option !!!
), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function save_custom_stock_status( $product_id ) {
update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);
function woocommerce_get_custom_availability( $data, $product ) {
switch( $product->stock_status ) {
case 'instock':
$data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' );
break;
case 'outofstock':
$data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' );
break;
case 'onrequest':
$data = array( 'availability' => __( 'под заказ', 'woocommerce' ), 'class' => 'on-request' );
break;
}
return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
Похожие товары
/*количество похожих товаров*/
add_filter( 'woocommerce_output_related_products_args', 'jk_related_products_args' );
function jk_related_products_args( $args ) {
$args['posts_per_page'] = 3; // количество "Похожих товаров"
$args['columns'] = 1; // количество колонок
return $args;
}
Хлебные крошки
/*Изменяем Текст ‘Главная’ в хлебных крошках*/
add_filter( 'woocommerce_breadcrumb_defaults', 'jk_change_breadcrumb_home_text' );
function jk_change_breadcrumb_home_text( $defaults ) {
// Изменяем текст для главной страницы с 'Главная' на 'Аппартаменты'
$defaults['home'] = 'Аппартаменты';
return $defaults;
}
/*Изменяем Разделитель В Хлебных Крошках*/
add_filter( 'woocommerce_breadcrumb_defaults', 'jk_change_breadcrumb_delimiter' );
function jk_change_breadcrumb_delimiter( $defaults ) {
// Изменяем разделитель хлебных крошек с '/' на '>'
$defaults['delimiter'] = ' > ';
return $defaults;
}
/*Меняем Всё в хлебных крошках*/
add_filter( 'woocommerce_breadcrumb_defaults', 'jk_woocommerce_breadcrumbs' );
function jk_woocommerce_breadcrumbs() {
return array(
'delimiter' => ' / ',
'wrap_before' => '<nav class="woocommerce-breadcrumb" itemprop="breadcrumb">',
'wrap_after' => '</nav>',
'before' => '',
'after' => '',
'home' => _x( 'Аппартаменты', 'breadcrumb', 'woocommerce' ),
);
}
/*Изменяем Ссылку На Главную Страницу На Произвольную Ссылку*/
add_filter( 'woocommerce_breadcrumb_home_url', 'woo_custom_breadrumb_home_url' );
function woo_custom_breadrumb_home_url() {
return 'http://example.com';
}
/*Убираем Хлебные Крошки*/
add_action( 'init', 'jk_remove_wc_breadcrumbs' );
function jk_remove_wc_breadcrumbs() {
remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 );
}
Работа с корзиной
/*меняем добавить в корзину на купить*/
function remove_loop_button(){
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
}
add_action('init','remove_loop_button');
add_action('woocommerce_after_shop_loop_item','replace_add_to_cart');
function replace_add_to_cart() {
global $product;
// $link = $product->get_permalink();
$iid = $product->get_id();
echo do_shortcode('<a class="button addtocartbutton" href="?add-to-cart='.$iid.'">Купить</a>');
}
Работа с карточкой товара
/*Добавление своих состояний товара*/
function add_custom_stock_type() {
?>
<script type="text/javascript">
jQuery(function(){
jQuery('._stock_status_field').not('.custom-stock-status').remove();
});
</script>
<?php
woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array(
'instock' => __( 'В наличии', 'woocommerce' ),
'outofstock1' => __( 'Под заказ', 'woocommerce' ),
'onrequest' => __( 'Снят с производства', 'woocommerce' ), // The new option !!!
), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) );
}
add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type');
function save_custom_stock_status( $product_id ) {
update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) );
}
add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1);
function woocommerce_get_custom_availability( $data, $product ) {
switch( $product->stock_status ) {
case 'instock':
$data = array( 'availability' => __( 'В наличии', 'woocommerce' ), 'class' => 'in-stock' );
break;
case 'outofstock1':
$data = array( 'availability' => __( 'Под заказ', 'woocommerce' ), 'class' => 'out-of-stock' );
break;
case 'onrequest':
$data = array( 'availability' => __( 'Снят с производства', 'woocommerce' ), 'class' => 'on-request' );
break;
}
return $data;
}
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);
Другие сниппеты
/*поддержка вукоммерс в теме*/
add_action( 'after_setup_theme', 'woocommerce_support' );
function woocommerce_support() {
add_theme_support( 'woocommerce' );
}
/*Замена значка на рубля на руб.*/
function change_rub_symbol() {
// Just returns rubles
return 'руб.';
}
add_filter( 'woocommerce_currency_symbol', 'change_rub_symbol', 50 );
/*удалить выпадающий список «Сортировать по...»*/
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );