Хук перед/после контентом «the_content()» WordPress

Другими словами, как добавить выше или ниже контента дополниетельный HTML код или PHP скрипт. Или, например, просто заменить текст записи.

add_action('the_content', 'vakulkin_modifyContent');
function vakulkin_modifyContent($content) {

	$content = 'Текст до' . $content;
	// $content .= 'Текст после контента';
	// $content = 'Замена контента';
	return $content;
}

Действие при обновлении статуса заказа WooCommerce

function woo_order_status_change_custom($order_id, $old_status, $new_status) {

	$order = wc_get_order($order_id);
	//делаем то, что нам нужно с заказом
	
}
add_action('woocommerce_order_status_changed','woo_order_status_change_custom', 10, 3);

Функция добавления названия категорий товара WooCommerce в тег body

function wc_product_cats_css_body_class( $classes ){
  if (is_singular('product')) {
    $current_product = wc_get_product();
    $custom_terms = get_the_terms($current_product->get_id(), 'product_cat');
    if ($custom_terms) {
      foreach ($custom_terms as $custom_term) {
        $classes[] = 'product_cat_' . $custom_term->slug;
      }
    }
  }
  return $classes;
}
add_filter( 'body_class', 'wc_product_cats_css_body_class' );

WooCommerce плагин для оптики

К сожалению стандартными средствами WooCommerce (вариативными товарами) интернет-магазину очков и линз не обойтись. Поскольку в каждом товаре необходимо создать как-бы два товара: один для левого глаза, второй для правого.

Из данной проблемы можно было бы выкрутиться создавая по два одинаковых товара для каждого глаза. Но это очень неудобно как с точки зрения пользователя так и администратора сайта.

Функционал плагина

  • Выбор формы продажи (один глаз, пара, упаковка)
  • Поддержка неограниченного кол-ва атрибутов которые зависят от особенностей зрения клиента
  • Выбор количества для каждого глаза
  • Динамическое изменение цены в зависимости от количества и формы продажи
  • Отображение выбранных параметров в корзине, мини-корзине, странице оплаты, странице благодарности, email-e, админке.

Плагин уже реализован на одном из клиентских сайтов и заточен индивидуально под их нужны.

В планах создание универсального плагина-оптики, если этим кто-либо заинтересуется.

mySQL GROUP_CONCAT

SQL запрос для объединения разных значений колонки повторяющихся строк по какому либо признаку в одну строку

У нас имеется две таблицы:

Таблица 1: products

products_idproducts_title
1Товар 1
2Товар 2
3Товар 3

Таблица 2: products_images

products_idimage_url
1link1
2link2
1link3
2link4
1link5

Хотим получить такую таблицу:

products_id products_title image_url
1Товар 1link1,link3,link5
2Товар 2link2,link4
3Товар 3NULL

Для начала нам нужно просто объединить таблицы через левый JOIN, и получить такую таблицу

products_id products_title image_url
1Товар 1 link1
1Товар 1 link3
1Товар 1 link5
2Товар 2link2
2Товар 2link4
3Товар 3NULL
SELECT * FROM products p
    LEFT OUTER JOIN products_images pi ON p.products_id=pi.products_id

После чего переходим к следующему запросу, в результате чего получаем желаемую таблицу

SELECT * FROM products p
    LEFT OUTER JOIN
    	(SELECT products_id, GROUP_CONCAT(image) FROM products_images GROUP BY products_id) pi ON p.products_id=pi.products_id
products_id products_title image_url
1 Товар 1 link1,link3,link5
2 Товар 2 link2,link4
3 Товар 3NULL

Разделитель по умолчанию — запятая, его можно поменять, на любую другую стоку, установив параметр GROUP_CONCAT(image SEPARATOR '|')

Конечно, в одном запросе можно использовать несколько JOIN-ов и GROUP_CONCAT-ов, вот пример запроса который я недавно использовал:

SELECT * FROM products p
	LEFT OUTER JOIN products_description pd ON p.products_id=pd.products_id 
    LEFT OUTER JOIN
    	(SELECT products_id, GROUP_CONCAT(image) FROM products_images GROUP BY products_id) pi ON p.products_id=pi.products_id
    LEFT OUTER JOIN 
    	(SELECT t.products_id, GROUP_CONCAT(t.categories_id, '_', t.categories_name SEPARATOR '|') FROM (        
            SELECT ptc.products_id, ptc.categories_id, cd.categories_name FROM products_to_categories ptc LEFT OUTER JOIN categories_description cd ON ptc.categories_id=cd.categories_id        
        ) t GROUP BY products_id) g ON p.products_id=g.products_id