Как поменять позицию блока WordPress + WooCommerce + WoodMart?
Всем здоровья!
Сайт на Вордпресс, тема 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 ); }
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


В 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 ); });
Но имя функции получения экземпляра у WoodMart может отличаться. Поэтому сначала через поиск по теме найдите класс, где объявлен
output_shipping_progress_bar(), и посмотрите, как создаётся объект. В некоторых версиях темы объект хранится в singleton или доступен через глобальный контейнер.Если метод нельзя удобно снять через
remove_action, есть более практичный путь: отключить штатное место вывода в настройках WoodMart и вывести блок вручную в нужном шаблоне дочерней темы. Но это уже зависит от версии темы.Главное правило: перенос делается не CSS-позиционированием, а через hook. CSS-ом можно только подправить отступы. После изменения проверьте карточку товара, вариативный товар, корзину и оформление заказа, потому что WoodMart может выводить этот progress bar в нескольких местах.