При работе с плагином Woocommerce на сайте часто требуется изменять вид отображения карточек товара, корзины и многое другое.
Для этих целей можно править шаблоны, применять плагины и использовать хуки. В этом посте я буду собирать полезные хуки для вукомерц.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
/* убрать ссылку с карточки товара */ add_action('woocommerce_before_shop_loop_item', 'remove_link', 1); function remove_link() { remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 ); } /* убрать ссылку с корзины */ add_filter( 'woocommerce_cart_item_name', 'mad_remove_cart_product_link', 1, 3 ); function mad_remove_cart_product_link( $product_link, $cart_item, $cart_item_key ) { $product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); return " Ч " . $product->get_title() . " Ч "; } // Выводит в карточке товара В наличии, по умолчанию в наличии не выводит, только предзаказ и нет в наличии выводит add_filter( 'woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2); function wcs_custom_get_availability( $availability, $_product ) { // Change In Stock Text if ( $_product->is_in_stock() ) { if (get_post_meta(get_the_ID(), '_stock_status', true) == 'instock') { $availability['availability'] = __('в наличии', 'woocommerce'); } } return $availability; } /* вывести краткое описание в мини карточке товара */ add_action('woocommerce_after_shop_loop_item_title','woocommerce_template_single_excerpt', 5); //убираем количество товаров в скобках в категориях add_filter('woocommerce_subcategory_count_html','remove_count'); function remove_count(){ $html=''; return $html; } // Автоматическое обновлении корзины, при изменении количества товаров // Нельзя убирать input «Обновить», если он не нужен его надо просто скрыть display: none, без него обновление не работает add_action( 'wp_footer', 'cart_update_qty_script' ); function cart_update_qty_script() { if (is_cart()) : ?> <script> jQuery('div.woocommerce').on('change', '.qty', function(){ jQuery("[name='update_cart']").trigger("click"); }); </script> <?php endif; } // Сортировка товаров WooCommerce, нет в наличии ставим в конец перечня товаров, отвалилась корзина add_action( 'pre_get_posts', 'mik_exclude_category' ); function mik_exclude_category( $query ) { if ( $query->is_main_query() ) { $query->set( 'meta_key', '_stock_status' ); $query->set( 'orderby', array('meta_value' => 'ASC', 'date' => 'DESC') ); } } // или такая еще сортировка /* * Добавление опции сортировки */ add_filter( 'woocommerce_default_catalog_orderby_options', 'truemisha_new_orderby_option', 25 ); add_filter( 'woocommerce_catalog_orderby', 'truemisha_new_orderby_option', 25 ); function truemisha_new_orderby_option( $sortby ) { $sortby[ 'vnalichii' ] = 'Сначала товары в наличии'; return $sortby; } /* * Осуществление сортировки */ add_filter( 'woocommerce_get_catalog_ordering_args', 'truemisha_sort_by_stock', 25 ); function truemisha_sort_by_stock( $args ) { if ( isset( $_GET['orderby'] ) && 'vnalichii' == $_GET['orderby'] ) { $args[ 'meta_key' ] = '_stock_status'; $args[ 'orderby' ] = 'meta_value'; $args[ 'order' ] = 'ASC'; } return $args; } /** * Добавляем поле количество товаров перед кнопкой Купить на страницу архивов. Работает с Oxygen */ function custom_quantity_field_archive() { $product = wc_get_product( get_the_ID() ); if ( ! $product->is_sold_individually() && 'variable' != $product->product_type && $product->is_purchasable() && $product->is_in_stock() ) { woocommerce_quantity_input( array( 'min_value' => 1, 'max_value' => $product->backorders_allowed() ? '' : $product->get_stock_quantity() ) ); } } add_action( 'woocommerce_after_shop_loop_item', 'custom_quantity_field_archive', 9 ); function custom_add_to_cart_quantity_handler() { wc_enqueue_js( ' jQuery( ".product-type-simple" ).on( "click", ".quantity input", function() { return false; }); jQuery( ".product-type-simple" ).on( "change input", ".quantity .qty", function() { var add_to_cart_button = jQuery( this ).parents( ".product" ).find( ".add_to_cart_button" ); // For AJAX add-to-cart actions add_to_cart_button.attr( "data-quantity", jQuery( this ).val() ); // For non-AJAX add-to-cart actions //add_to_cart_button.attr( "href", "?add-to-cart=" + add_to_cart_button.attr( "data-product_id" ) + "&quantity=" + jQuery( this ).val() ); }); ' ); } add_action( 'init', 'custom_add_to_cart_quantity_handler' ); //количество товаров на странице add_filter( 'loop_shop_per_page', 'bbloomer_redefine_products_per_page', 9999 ); function bbloomer_redefine_products_per_page( $per_page ) { $per_page = 200; return $per_page; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// Заменить кнопки Купить в карточке товара add_filter( 'woocommerce_product_single_add_to_cart_text', 'bryce_add_to_cart_text' ); function bryce_add_to_cart_text() { return __( 'Заказать', 'your-slug' ); } // Заменить кнопки Купить на странице каталога товаров add_filter( 'woocommerce_product_add_to_cart_text' , 'custom_woocommerce_product_add_to_cart_text' ); function custom_woocommerce_product_add_to_cart_text() { global $product; $product_type = $product->product_type; switch ( $product_type ) { case 'external': return __( 'Take me to their site!', 'woocommerce' ); break; case 'grouped': return __( 'VIEW THE GOOD STUFF', 'woocommerce' ); break; case 'simple': return __( 'Заказать', 'woocommerce' ); break; case 'variable': return __( 'Выбрать', 'woocommerce' ); break; default: return __( 'Read more', 'woocommerce' ); } } |