Этот пост является последним в серии о хуках WooCommerce. В этой серии статей рассматриваются хуки, которые разработчики могут использовать в своих проектах WooCommerce для настройки и / или улучшения различных функций своих проектов. Этот выпуск посвящен действиям виджета WooCommerce.
Действия WooCommerce позволяют разработчикам добавлять или удалять код в основные плагины. Используя действия, разработчики могут расширить функциональные возможности WooCommerce. Действия могут использоваться для добавления сценариев конверсии в процесс оформления заказа, добавления информации на страницы магазина или продукта, добавления настраиваемых полей в заказы и действия в качестве триггеров для определенных событий.
Вот краткий список действий виджета WooCommerce:
- woocommerce_after_widget_product_list: ядро WordPress woocommerce после перехвата списка продуктов виджета
Тип: фильтр
if (($ products = $ this- ›get_products ($ args, $ instance)) && $ products-› have_posts ()) {
$ this- ›widget_start ($ args, $ instance);
echo apply_filters (‘woocommerce_before_widget_product_list’, ‘‹ ul class = »product_list_widget» ›’);
while ($ products- ›have_posts ()) {
$ products- ›the_post ();
wc_get_template (‘content-widget-product.php’, array (‘show_rating’ = ›false));
}
echo apply_filters (‘woocommerce_after_widget_product_list’, ‘‹/ul›’);
$ this- ›widget_end ($ args);
}
- woocommerce_before_widget_product_list: ядро WordPress woocommerce перед списком продуктов виджета
Тип: фильтр
echo apply_filters (‘woocommerce_before_widget_product_list’, ‘‹ ul class = »product_list_widget» ›’);
- woocommerce_layered_nav_link: Эта функция устанавливает глобальную переменную и выбирает термины таксономии и запрос.
Тип: фильтр
if (! empty ($ current_filter)) {
$ link = add_query_arg ($ filter_name, implode (‘,’, $ current_filter), $ link);
// Добавить тип запроса Arg в URL
if ($ query_type === ‘or’ &&! (1 === sizeof ($ current_filter) && $ option_is_set)) {
$ link = add_query_arg (‘query_type_’. sanitize_title (str_replace (‘pa_’, ‘’, $ taxonomy)), ‘or’, $ link);
}
}
echo ‘‹ li class = »wc-Layered-nav-term‘. ($ option_is_set? ‘selected’: ‘’). ‘« ›’;
эхо ($ count ›0 || $ option_is_set)? ‘‹ A href = ”’. esc_url (apply_filters (‘woocommerce_layered_nav_link’, $ link)). '">' : '';
echo esc_html ($ term- ›имя);
эхо ($ count ›0 || $ option_is_set)? ‘‹/A›’: ‘‹/span›’;
echo ‘‹ span class = »count» ›(‘. absint ($ count). ‘) ‹/span› ‹/li›»;
- woocommerce_price_filter_meta_keys: получите отфильтрованную минимальную цену для текущих продуктов.
Тип: фильтр
$ meta_query = новый WP_Meta_Query ($ meta_query);
$ tax_query = новый WP_Tax_Query ($ tax_query);
$ meta_query_sql = $ meta_query- ›get_sql (« сообщение », $ wpdb-› сообщения, «ID»);
$ tax_query_sql = $ tax_query- ›get_sql ($ wpdb-› posts, «ID»);
$ sql = «ВЫБРАТЬ min (CAST (price_meta.meta_value AS UNSIGNED)) как min_price, max (CAST (price_meta.meta_value AS UNSIGNED)) как max_price FROM {$ wpdb-› posts} »;
$ sql. = «LEFT JOIN {$ wpdb-› postmeta} as price_meta ON {$ wpdb- ›posts} .ID = price_meta.post_id«. $ tax_query_sql ["присоединиться"]. $ meta_query_sql ["присоединиться"];
$ sql. = «ГДЕ {$ wpdb-› posts} .post_type = ‘product’ »
И {$ wpdb- ›posts} .post_status =« опубликовать »
И price_meta.meta_key IN (‘“. Implode (“‘, ’”, array_map (‘esc_sql’, apply_filters (‘woocommerce_price_filter_meta_keys’, array (‘_price’))). “‘).
И price_meta.meta_value ›‘ ’«;
$ sql. = $ tax_query_sql [‘где’]. $ meta_query_sql [‘где’];
return $ wpdb- ›get_row ($ sql);
- woocommerce_price_filter_widget_max_amount: Максимальное количество виджета ценового фильтра WordPress Core woocommerce
Тип: фильтр
echo ‘‹ form method = ”get” action = ”’. esc_url ($ form_action). ‘“ ›
‹Div class =” price_slider_wrapper ”›
‹Div class =" price_slider "style =" display: none; "› ‹/div›
‹Div class =” price_slider_amount ”›
‹Input type =” text ”id =” min_price ”name =” min_price ”value =” ’. esc_attr ($ min_price). ‘« Data-min = »’. esc_attr (apply_filters (‘woocommerce_price_filter_widget_min_amount’, $ мин.)). ‘« Placeholder = »’. esc_attr __ («Минимальная цена», «woocommerce»). ‘“ / ›
‹Input type =” text ”id =” max_price ”name =” max_price ”value =” ’. esc_attr ($ max_price). ‘« Data-max = »’. esc_attr (apply_filters (‘woocommerce_price_filter_widget_max_amount’, $ max)). ‘« Placeholder = »’. esc_attr __ («Макс. цена», «woocommerce»). ‘“ / ›
‹Button type =” submit ”class =” button ”› ’. __ («Фильтр», «woocommerce»). '
‹Div class =" price_label "style =" display: none; "›
‘. __ (‘Price:’, ‘woocommerce’). ‘‹ Span class = »от» ›‹/span›‹ span class = »до» ›‹/span›
‹/Div›
‘. $ fields. ‘
‹Div class =” clear ”› ‹/div›
‹/Div›
‹/Div›
';
- woocommerce_price_filter_widget_min_amount: Определите обратный вызов минимальной суммы виджета ценового фильтра woocommerce.
Тип: фильтр
$ list_args [‘walker’] = новый WC_Product_Cat_List_Walker;
$ list_args [‘title_li’] = ‘’;
$ list_args [‘pad_counts’] = 1;
$ list_args [‘show_option_none’] = __ («Нет категорий продуктов.», «woocommerce»);
$ list_args [‘current_category’] = ($ this- ›current_cat)? $ this- ›current_cat-› term_id: ‘’;
$ list_args [‘current_category_ancestors’] = $ this- ›cat_ancestors;
echo ‘‹ ul class = »категории товаров» ›’;
wp_list_categories (apply_filters (‘woocommerce_product_categories_widget_args’, $ list_args));
эхо ‘‹/ul›’;
- woocommerce_product_categories_widget_args: Перехват аргументов виджета категорий продуктов woocommerce ядра WordPress
Тип: фильтр
$ list_args [‘walker’] = новый WC_Product_Cat_List_Walker;
$ list_args [‘title_li’] = ‘’;
$ list_args [‘pad_counts’] = 1;
$ list_args [‘show_option_none’] = __ («Нет категорий товаров.», «woocommerce»);
$ list_args [‘current_category’] = ($ this- ›current_cat)? $ this- ›current_cat-› term_id: ‘’;
$ list_args [‘current_category_ancestors’] = $ this- ›cat_ancestors;
echo ‘‹ ul class = »категории товаров» ›’;
wp_list_categories (apply_filters (‘woocommerce_product_categories_widget_args’, $ list_args));
эхо ‘‹/ul›’;
- woocommerce_product_categories_widget_dropdown_args: Аргументы раскрывающегося списка виджетов категорий продуктов WordPress Core woocommerce.
Тип: фильтр
if ($ dropdown) {
$ dropdown_defaults = массив (
‘Show_count’ = ›$ count,
‘Ierarchical ’=› $ иерархический,
‘Show_uncategorized’ = ›0,
‘Orderby’ = ›$ orderby,
‘Selected’ = ›$ this-› current_cat? $ this- ›current_cat-› slug: ‘’
);
$ dropdown_args = wp_parse_args ($ dropdown_args, $ dropdown_defaults);
// Зацикливаемся на этом, пока не исправим https://core.trac.wordpress.org/ticket/13258
wc_product_dropdown_categories (apply_filters (‘woocommerce_product_categories_widget_dropdown_args’, $ dropdown_args));
wc_enqueue_js («
jQuery (‘.dropdown_product_cat’) .change (function () {
if (jQuery (this) .val ()! = ‘’) {
var this_page = ‘’;
var home_url = ‘“. esc_js (home_url (‘/’)). «‘;
if (home_url.indexOf (‘?’) ›0) {
this_page = home_url + ‘& product_cat =’ + jQuery (this) .val ();
} еще {
this_page = home_url + ‘? product_cat =’ + jQuery (this) .val ();
}
location.href = this_page;
}
});
“ );
// Список
}
- woocommerce_product_categories_widget_product_terms_args: Виджет категорий продуктов WordPress Core woocommerce термины продукта args hook
Тип: фильтр
$ this- ›current_cat = false;
$ this- ›cat_ancestors = array ();
if (is_tax (‘product_cat’)) {
$ this- ›current_cat = $ wp_query-› queried_object;
$ this- ›cat_ancestors = get_ancestors ($ this-› current_cat- ›term_id,‘ product_cat ’);
} elseif (is_singular (‘product’)) {
$ product_category = wc_get_product_terms ($ post- ›ID,‘ product_cat ’, apply_filters (‘ woocommerce_product_categories_widget_product_terms_args ’, array (‘ orderby ’=› ‘parent’)));
if (! empty ($ product_category)) {
$ this- ›current_cat = end ($ product_category);
$ this- ›cat_ancestors = get_ancestors ($ this-› current_cat- ›term_id,‘ product_cat ’);
}
}
- woocommerce_product_tag_cloud_widget_args: Перехват аргументов виджета облака тегов продукта WordPress Core woocommerce
Тип: фильтр
echo ‘‹ div class = ”tagcloud” ›’;
wp_tag_cloud (apply_filters (‘woocommerce_product_tag_cloud_widget_args’, массив (
‘Taxonomy’ = ›$ current_taxonomy,
‘Topic_count_text_callback’ = ›массив ($ this,‘ _topic_count_text ’),
) ) );
эхо ‘‹/div›’;
- woocommerce_products_widget_query_args: ловушка args запроса виджета продуктов woocommerce ядра WordPress
Тип: фильтр
публичная функция get_products ($ args, $ instance) {
$ число =! пусто ($ instance [‘number’])? абсент ($ instance [‘number’]): $ this- ›settings [‘ number ’] [‘ std ’];
$ show =! пусто ($ instance [‘show’])? sanitize_title ($ instance [‘show’]): $ this- ›settings [‘ show ’] [‘ std ’];
$ orderby =! пустой ($ instance [‘orderby’])? sanitize_title ($ instance [‘orderby’]): $ this- ›settings [‘ orderby ’] [‘ std ’];
$ заказ =! пусто ($ instance [‘order’])? sanitize_title ($ instance [‘order’]): $ this- ›settings [‘ order ’] [‘ std ’];
$ query_args = массив (
‘Posts_per_page’ = ›$ number,
‘Post_status’ = ›‘ опубликовать ’,
‘Post_type’ = ›‘ product ’,
‘No_found_rows’ = ›1,
‘Order’ = ›$ order,
‘Meta_query’ = ›array ()
);
if (empty ($ instance [‘show_hidden’])) {
$ query_args [‘meta_query’] [] = WC () - ›query-› visibility_meta_query ();
$ query_args [‘post_parent’] = 0;
}
if (! empty ($ instance [‘hide_free’])) {
$ query_args [‘meta_query’] [] = array (
‘Key’ = ›‘ _price ’,
‘Value’ = ›0,
‘Compare’ = ›‘ ›’,
‘Type’ = ›‘ DECIMAL ’,
);
}
$ query_args [‘meta_query’] [] = WC () - ›query-› stock_status_meta_query ();
$ query_args [‘meta_query’] = array_filter ($ query_args [‘meta_query’]);
switch ($ show) {
case "Featured":
$ query_args [‘meta_query’] [] = array (
‘Key’ = ›‘ _featured ’,
‘Value’ = ›‘ yes ’
);
ломать;
case «onsale»:
$ product_ids_on_sale = wc_get_product_ids_on_sale ();
$ product_ids_on_sale [] = 0;
$ query_args [‘post__in’] = $ product_ids_on_sale;
ломать;
}
switch ($ orderby) {
case «цена»:
$ query_args [‘meta_key’] = ‘_price’;
$ query_args [‘orderby’] = ‘meta_value_num’;
ломать;
case ‘rand’:
$ query_args [‘orderby’] = ‘rand’;
ломать;
case «продажи»:
$ query_args [‘meta_key’] = ‘total_sales’;
$ query_args [‘orderby’] = ‘meta_value_num’;
ломать;
дефолт :
$ query_args [‘orderby’] = ‘date’;
}
вернуть новый WP_Query (apply_filters (‘woocommerce_products_widget_query_args’, $ query_args));
}
- woocommerce_rating_filter_link: Перехватчик ссылки фильтра рейтинга woocommerce ядра WordPress
Тип: фильтр
echo ‘‹ li class = »wc-Layered-nav-rating‘. (! empty ($ _GET [‘min_rating’]) && $ rating === absint ($ _GET [‘min_rating’])? ‘selected’: ‘’). ‘« ›’;
echo ‘‹ a href = ”’. esc_url (apply_filters (‘woocommerce_rating_filter_link’, $ link)). ‘« ›’;
echo ‘‹ span class = »star-rating» title = »’. esc_attr (sprintf (__ («Оценка% s и выше», «woocommerce»), $ rating)). ‘“ ›
‹Span style =” width: ’. esc_attr (($ рейтинг / 5) * 100). ‘%” ›’. sprintf (__ («Оценка% s и выше», «woocommerce»), $ rating). '
‹/Span› (‘. Esc_html ($ count).‘) ’;
эхо ‘‹/a›’;
эхо ‘‹/li›’;
- woocommerce_widget_cart_is_hidden: Корзина виджетов woocommerce в WordPress Core скрыта.
Тип: фильтр
виджет публичной функции ($ args, $ instance) {
if (apply_filters (‘woocommerce_widget_cart_is_hidden’, is_cart () || is_checkout ())) {
возвращение;
}
$ hide_if_empty = empty ($ instance [‘hide_if_empty’])? 0: 1;
$ this- ›widget_start ($ args, $ instance);
if ($ hide_if_empty) {
echo ‘‹ div class = ”hide_cart_widget_if_empty” ›’;
}
// Вставить заполнитель виджета корзины - код в woocommerce.js обновит его при загрузке страницы
echo ‘‹ div class = ”widget_shopping_cart_content” ›‹/div›’;
if ($ hide_if_empty) {
эхо ‘‹/div›’;
}
$ this- ›widget_end ($ args);
}
Вывод
В этой статье я обсудил концепцию хуков виджетов WooCommerce и то, как эта концепция используется в разработке WooCommerce.
Первоначально опубликовано на www.cloudways.com 13 декабря 2016 г.