Кнопка «цена по запросу» для товаров WooCommerce

Если в WooCommerce требуется вместо кнопки «купить» для каждого товара, у которого не указана цена, выводить кнопку «цена по запросу» или что-то в этом плане, добавим в файл functions.php вашей темы следующий код:

function my_price_replace($price, $_product) {
if ($_product->get_price() == 0) return __('
<span><a class="fancybox-inline btn" href="#contact_form_pop">Цена по запросу</a></span>
<div class="fancybox-hidden" style="display: none;">
<div id="contact_form_pop">'.do_shortcode('[contact-form-7 404 "Not Found"]').'</div></div>
');
return $price;
}
add_filter( 'woocommerce_empty_price_html', 'my_price_replace', 1, 2 );

Для работы данного метода у вас должны быть установлены плагины Easy FancyBox и Contact Form 7.
В настройках Easy FancyBox должен быть включен параметр «Inline content».
А в плагине Contact Form 7 вы создадите ту форму, которая будет выводиться при нажатии на кнопку «Цена по запросу».
Созданная вами форма будет иметь свой код вставки, в коде выше это [contact-form-7 404 "Not Found"]. Замените выделенную красным часть текста в коде на свою.
Для задания стилей для кнопки редактируйте класс btn через css.

28 комментариев

  1. Здравствуйте! У меня немного сложная задача — имеются разные категории товаров, где цена товаров по запросу, и нужно, чтобы для товаров из разных категорий при нажатии на ссылку «цена по запросу» всплывала своя контактная форма в зависимости от категории товара (отправка запроса на разные адреса). Если можно, пришлите код на почту. Спасибо!

    1. Нужно знать id категорий, после объявления функции получить и перебрать все категории текущего товара, а потом сделать условие вывода, сделать несложно, но платно.

  2. А возможно, если в контактной форме, есть поле тема, то в нее записать текст = имени товара?

    1. Первое что приходит в голову, это создать в форме скрытое поле, и туда с помощью js передавать вариацию товара, если нужно сделаю Вам платно.

  3. И еще вопрос, как добавить снизу кнопки номер телефон ну или просто текст, подскажите?

    1. Ниже строчки: <span><a class=»fancybox-inline btn» href=»#contact_form_pop» rel=»nofollow»>Цена по запросу</a></span>
      Добавить нужный вам текст <p>Номер телефона: 8 999 555 66 44</p>

  4. Я в этом деле нуб, но вставив ваш код все отлично работает.
    Вопрос только 1, как изменить стиль кнопки «Цена по запросу», как файл редактировать.

  5. Здраствуйте. Подключил запрос цены вашим способом. Имеются несколько проблем. На главной странице по шаблону темы frontpage.php отображаемый товар имеет кнопку, но при вызове easyfancy box открывается форма без полей и кнопки отправить. В форме они имееются. На мобильных версиях вообще не работает. С карточки товара все работает. Кроме мобильных версии. Есть ли способы рещения данных проблем? Заранее спасибо

    1. Здравствуйте, проверьте на одной из стандартных тем WP. Возможнен конфликт скриптов вашей темы и данного решения. Если на стандартной теме все будет работать норм, тогда нужно делать правки в вашей теме. Это платно, пишите в личку.

  6. Возможно ли данную кнопку сделать только для страницы товаров, а на странице категории выводить просто надпись «Цена по запросу?»

    1. Нужно сделать проверку на нахождение на странице каталога, попробуйте использовать функцию is_post_type_archive, примерно так:

      if (is_post_type_archive( 'product' )) {
       // код простой надписи
      }
      else {
       // код кнопки
      }
      
  7. Здравствуйте! А как сделать чтобы строка цена по запросу можно было еще перевести на другой язык через плагин polylang?

    1. К сожалению пока не работал с данным плагином, если плагин работает с файлами переводов, тогда нужно создать такие файлы и подгрузить их в функцию.

  8. Короче, остался непонятным только последний момент — форма запроса цены автоматически не закрывается по отправке… То есть все отправляется, но у клиента на экране та же форма… Похоже это скорее к easy fancy box вопрос…

  9. Работает отлично, но оказался такой косяк — в АДМИНКЕ для товара с нулевой ценой в графе ЦЕНА в текстовом виде прет в одну длинную колонку форма запроса цены… Подскажите, где копнуть вывод в админке чтобы это безобразие убрать?

    1. Один из вариантов, в админке отключить колонку с ценой, другой вариант написать дополнительное условие — проверку на нахождение в админке, функция is_admin()
      https://wp-kama.ru/function/is_admin

      1. Вандебра! Вставляйте в вашу статью:

        if ($_product->get_price() == 0 && !is_admin()) return __(‘

        отлично пашет, в админке красота и порядок. На фронте все как надо — с запросом.

  10. Здравствуйте
    «Замените выделенную красным часть текста в коде на свою.»
    Блин, я дальтоник. Где выделено красным?

  11. Добрый вечер!
    Подскажите, как прописать , чтобы всплывающая форма находилась по центру экрана . Ведь возможно кнопка будет в самом низу

    1. Здравствуйте, если вы используете плагин Easy FancyBox для создания всплывающего окна, то окно по умолчанию выводится по центру, а форму можно настроить через css, пришлите ссылку или скриншот, чтобы я понял проблему точнее.

  12. День добрый! Большое спасибо за статью. Информация помогла. Успехов Вам. И побольше полезной информации

Оставить комментарий

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