Как изменить расположение элементов WooCommerce в WordPress?

Привет!
WordPress с собственной темой и подключенным WooCommerce.
Стандартные стили и расположение элементов (название товара, изображение, описание и др.) не используется. Точнее со стилями все понятно, и о перемещении нужных файлов woocommerce/template в шаблон известно. Но не могу понять как изменить порядок и расположение элементов (название товара, изображение, описание и др.). Я искал и вроде бы понял, что нужно использовать @hooked, но не понял как. Наведите на правильный путь

Например, часть из "content-single-product.php"
<div itemscope itemtype="http://schema.org/Product" id="product-<?php the_ID(); ?>" <?php post_class(); ?>>

	<?php
		/**
		 * woocommerce_show_product_images hook
		 *
		 * @hooked woocommerce_show_product_sale_flash - 10
		 * @hooked woocommerce_show_product_images - 20
		 */
		do_action( 'woocommerce_before_single_product_summary' );
	?>
	
	<? do_action( 'woocommerce_template_single_title' ); ?>
	<div class="summary entry-summary">

		<?php
			/**
			 * woocommerce_single_product_summary hook
			 *
			 * @hooked woocommerce_template_single_title - 5
			 * @hooked woocommerce_template_single_price - 10
			 * @hooked woocommerce_template_single_excerpt - 20
			 * @hooked woocommerce_template_single_add_to_cart - 30
			 * @hooked woocommerce_template_single_meta - 40
			 * @hooked woocommerce_template_single_sharing - 50
			 */

			do_action( 'woocommerce_single_product_summary' );
		?>

	</div><!-- .summary -->

	<?php
		/**
		 * woocommerce_after_single_product_summary hook
		 *
		 * @hooked woocommerce_output_product_data_tabs - 10
		 * @hooked woocommerce_output_related_products - 20
		 */
		do_action( 'woocommerce_after_single_product_summary' );
	?>

</div><!-- #product-<?php the_ID(); ?> -->


Спасибо за внимание!
  • Вопрос задан
  • 46439 просмотров
Решения вопроса 1
Punkie
@Punkie Куратор тега WordPress
Немножечко вордпрессирую
В папке плагина woocommerce есть файл со всеми хуками - woocommerce_hooks.php . Находите в нем отрезок, который отвечает за нужный вам кусок шаблона (в вашем случае woocommerce_single_product_summary), смотрите вызовы add_action.
У вас они будут как раз такие, как закоментировано в коде выше, то есть:
@hooked woocommerce_template_single_title - 5
             * @hooked woocommerce_template_single_price - 10
             * @hooked woocommerce_template_single_excerpt - 20
             * @hooked woocommerce_template_single_add_to_cart - 30
             * @hooked woocommerce_template_single_meta - 40
             * @hooked woocommerce_template_single_sharing - 50


В данном случае числа - это последовательность (приоритет) активации action'ов.
Теперь вам нужно в functions.php вашей темы деактивировать эти action'ы методом remove_action и выполнить их активацию в нужном вам порядке.
Например, вам нужно, чтобы сначала выводилось название товара, затем краткое описание, затем цена и тд.
Код будет примерно такой:
*тут перечисляем все строки с методом remove_action:

remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
... и т.д.

*Теперь вызываем те же действия по хуку woocommerce_single_product_summary, но в нужной нам последовательности:
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_title', 5);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 10);
add_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 15);
... и т.д.

Числовой приоритет вызова обычно делают кратным 5 для того, чтобы можно было потом еще что нибудь впихнуть между вызовами. Например, захотите потом добавить вывод ключевых слов или уникального поля товара между названием и кратким описанием. Тогда приоритет вызова можно будет сделать 6-9 без необходимости заново перебирать весь массив вызова хука.

Подробнее про понятия hook, action и filter читайте в официальном руководстве: Introduction to hooks: actions and filters
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
YuriMolotov
@YuriMolotov
Дизайн и вёрстка сайтов — Molotov.pro
У меня подобная ситуация прямо сейчас. Как я решил задачу:

1. Скопировал и закомментировал содержимое price.php
2. Вставил его в конец short-description.php

Всё. Блок стоимости идёт после описания.

Если честно не совсем понимаю смысл разбиения всего содержимого карточки товара на десятки файлов, я бы вообще всё поудалял и вставил одно за другим в content-single-product.php
Если кто-нибудь пояснит буду благодарен.
Ответ написан
vovakms
@vovakms
Основатель ИТ-компании
а каковы действия если требуется элементы со страницы с расположения товаров (в виде эскизов) расположить вручную, а не как заложено. А заложено там "сортировать по умолчанию", "по популярности", "по новинкам", "от дешевых к дорогим", "от дорогих к дешевым".
Ответ написан
@chusika
Вопрос! У меня выводятся товары в каталоге (по 3 или 4 в ряд). В стандартной версии заголовки товаров под изображением. В каком файле находятся хуки, чтобы внести изменения в перестановку элементов? В файле content-single-product.php только конкретно карточка товара, а мне нужен каталог, где отображается несколько товаров.
Ответ написан
Velimudr1
@Velimudr1
Человек
Благодарю за ответы-советы-подсказки, тот же вопрос мучил, разное пробовал, но к этому не додумался ))
(Через время)
Поспешил радоваться, в теме (Delphinus) ни в какую НЕ хотят по отдельности выводиться элементы, как ни удаляю, ставлю только по одному хуку, если функция вывода есть, выводится абсолютно всё, хуки до заднего места (( меняется исключительно расположение.
Только удалить можно, конкретно в шаблоне. Добавить что-то одно - невозможно.
(ещё позже)
Видимо не о том написал. Это всего лишь хуки.
Проблема в том что с интернет-магазинами вообще дел не имею, не хотел раньше, не интересно в них копаться. Но вынудила ситуация начать. Не могу понять как вывести отдельно элемент, один-единственный, а не пачку (как это бесит, отсутствие реализации, словно все поголовно используют шаблоны глупые).
remove_action кроме двух элементов ничего больше не способен удалить, вообще. Те что может - соц.сети и Метки, больше ничего, в нескольких вариантах опробовал.
Благодарю всех кто даже просто прочёл, особенно тех кто ответит.
Ответ написан
@by_haskell
Достаточно в стилях order прописать, быстрее будет, так как не всегда помогает предложенные варианты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы