Как поменять позицию блока WordPress + WooCommerce + WoodMart?

Ссылка скопирована
1 ответ

Всем здоровья!

Сайт на Вордпресс, тема WoodMart. Подскажите пожалуйста как поменять позицию блока "Индикатор бесплатной доставки" в карточке товара? Сейчас это выглядит вот так:

Как поменять позицию блока WordPress + WooCommerce + WoodMart?

А надо, что бы было так:

Как поменять позицию блока WordPress + WooCommerce + WoodMart?

В файле темы нашел такой код

/** 	 * Output shipping progress bar. 	 */ 	public function output_shipping_progress_bar() { 		if ( ! woodmart_get_opt( 'shipping_progress_bar_enabled' ) ) { 			return; 		}  		if ( woodmart_get_opt( 'shipping_progress_bar_location_card_page' ) && ! Builder::get_instance()->has_custom_layout( 'cart' ) ) { 			add_action( 'woocommerce_before_cart_table', array( $this, 'render_shipping_progress_bar_with_wrapper' ) ); 		}  		if ( woodmart_get_opt( 'shipping_progress_bar_location_single_product' ) ) { 			add_action( 'woocommerce_single_product_summary', array( $this, 'render_shipping_progress_bar_with_wrapper' ), 29 ); 		}  		if ( woodmart_get_opt( 'shipping_progress_bar_location_checkout' ) ) { 			add_action( 'woocommerce_checkout_billing', array( $this, 'render_shipping_progress_bar_with_wrapper' ) ); 		} 	}

/** * Output shipping progress bar. */ public function output_shipping_progress_bar() { if ( ! woodmart_get_opt( 'shipping_progress_bar_enabled' ) ) { return; } if ( woodmart_get_opt( 'shipping_progress_bar_location_card_page' ) && ! Builder::get_instance()->has_custom_layout( 'cart' ) ) { add_action( 'woocommerce_before_cart_table', array( $this, 'render_shipping_progress_bar_with_wrapper' ) ); } if ( woodmart_get_opt( 'shipping_progress_bar_location_single_product' ) ) { add_action( 'woocommerce_single_product_summary', array( $this, 'render_shipping_progress_bar_with_wrapper' ), 29 ); } if ( woodmart_get_opt( 'shipping_progress_bar_location_checkout' ) ) { add_action( 'woocommerce_checkout_billing', array( $this, 'render_shipping_progress_bar_with_wrapper' ) ); } }

Как мне правильно прописать в файле functions.php, что бы изменить позицию эту

if ( woodmart_get_opt( 'shipping_progress_bar_location_single_product' ) ) { 			add_action( 'woocommerce_single_product_summary', array( $this, 'render_shipping_progress_bar_with_wrapper' ), 29 ); 		}

if ( woodmart_get_opt( 'shipping_progress_bar_location_single_product' ) ) { add_action( 'woocommerce_single_product_summary', array( $this, 'render_shipping_progress_bar_with_wrapper' ), 29 ); }

На эту

if ( woodmart_get_opt( 'shipping_progress_bar_location_single_product' ) ) { 			add_action( 'woocommerce_single_product_summary', array( $this, 'render_shipping_progress_bar_with_wrapper' ), 30 ); 		}

if ( woodmart_get_opt( 'shipping_progress_bar_location_single_product' ) ) { add_action( 'woocommerce_single_product_summary', array( $this, 'render_shipping_progress_bar_with_wrapper' ), 30 ); }

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Mobile-редакция Ответ

В WoodMart позиция “индикатора бесплатной доставки” обычно управляется хуками WooCommerce. В найденном Вами коде видно, что тема добавляет вывод через add_action('woocommerce_single_product_summary', ... , 29). Значит, чтобы перенести блок, нужно убрать его со старого hook и повесить на новый с нужным приоритетом.

Править файл темы напрямую не стоит: обновление WoodMart затрёт изменения. Делайте в дочерней теме или в небольшом mu-plugin. Общая логика такая:

add_action('wp', function () {
    if (!is_product()) {
        return;
    }
 
    $instance = woodmart_get_shipping_progress_bar_instance();
 
    if (!$instance || !method_exists($instance, 'render_shipping_progress_bar_with_wrapper')) {
        return;
    }
 
    remove_action(
        'woocommerce_single_product_summary',
        [$instance, 'render_shipping_progress_bar_with_wrapper'],
        29
    );
 
    add_action(
        'woocommerce_single_product_summary',
        [$instance, 'render_shipping_progress_bar_with_wrapper'],
        12
    );
});

add_action('wp', function () { if (!is_product()) { return; } $instance = woodmart_get_shipping_progress_bar_instance(); if (!$instance || !method_exists($instance, 'render_shipping_progress_bar_with_wrapper')) { return; } remove_action( 'woocommerce_single_product_summary', [$instance, 'render_shipping_progress_bar_with_wrapper'], 29 ); add_action( 'woocommerce_single_product_summary', [$instance, 'render_shipping_progress_bar_with_wrapper'], 12 ); });

Но имя функции получения экземпляра у WoodMart может отличаться. Поэтому сначала через поиск по теме найдите класс, где объявлен output_shipping_progress_bar(), и посмотрите, как создаётся объект. В некоторых версиях темы объект хранится в singleton или доступен через глобальный контейнер.

Если метод нельзя удобно снять через remove_action, есть более практичный путь: отключить штатное место вывода в настройках WoodMart и вывести блок вручную в нужном шаблоне дочерней темы. Но это уже зависит от версии темы.

Главное правило: перенос делается не CSS-позиционированием, а через hook. CSS-ом можно только подправить отступы. После изменения проверьте карточку товара, вариативный товар, корзину и оформление заказа, потому что WoodMart может выводить этот progress bar в нескольких местах.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно