Вопрос или проблема
Пытаюсь сделать что-то, что, как я думал, будет относительно простым.
Вот кнопка “Оформить заказ” по умолчанию в woocommerce
<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Place order" data-value="Place order">Place order</button>
и у Font Awesome есть этот значок замка <i class="fa fa-lock"></i>
Все, что я пытаюсь сделать, это добавить этот значок внутрь кнопки, так:
... data-value="Place order"><i class="fa fa-lock"></i> Place order</button>
То, что я пробовал:
1.
Переопределение шаблона payment.php
в моей дочерней теме: child-theme/woocommerce/checkout/payment.php
.
изменил строку 52
—
<?php echo apply_filters( 'woocommerce_order_button_html', '<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="' . esc_attr( $order_button_text ) . '" data-value="' . esc_attr( $order_button_text ) . '"><i class="fa fa-lock"></i> ' . esc_html( $order_button_text ) . '</button>' ); // @codingStandardsIgnoreLine ?>
(просто добавил <i class="fa fa-lock"></i>
перед Place order
)
Так что я иду к чекауту, подтверждаю, что загружается мой шаблон в моей дочерней теме — и смотрю на кнопку.
Никаких изменений.
<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Place order" data-value="Place order">Place order</button>
-
через функции
add_filter( 'woocommerce_order_button_html', 'misha_custom_button_html' ); function misha_custom_button_html( $button_html ) { echo '<pre>'; var_dump(html_entity_decode($button_html)); echo '</pre>'; return $button_html; }
Та же история — я возвращаюсь к чекауту.
Прямо над кнопкой чекаута я вижу свой var_dump
'<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Place order" data-value="Place order"><i class="fa fa-lock"></i> Place order</button>' (length=190)
Так что он буквально показывает правильный HTML в var_dump, но прямо под ним находится кнопка,
<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Place order" data-value="Place order">Place order</button>
Никаких изменений.
Я также пробовал изменить его непосредственно в функции, но по какой-то причине он не рендерит правильный вывод для значка! Это значит, что HTML значка игнорируется вовсе.
Я могу изменить текст кнопки, добавить что-то перед ней или после, … но по какой-то причине я не могу добавить этот HTML значка внутрь.
Очень странно, я этого не понимаю.
Почему эта кнопка такая упрямая и как я могу добавить значок Font Awesome к кнопке?
Думаю, я могу сделать это с помощью псевдоэлементов CSS
#place_order::before {
content: "\f023";
font-family: FontAwesome;
}
и он показывает значок перед кнопкой.
Попробуйте это в файле functions.php,
add_filter( 'woocommerce_order_button_html', 'customize_order_button_html' );
function customize_order_button_html( $button_html ) {
$order_button_text="Place Order";
$button_html="<button type="submit" class="place-order-button button alt" . esc_attr( wc_wp_theme_get_element_class_name( 'button' ) ? ' ' . wc_wp_theme_get_element_class_name( 'button' ) : '' ) . '" name="woocommerce_checkout_place_order" value="' . esc_attr( $order_button_text ) . '" data-value="' . esc_attr( $order_button_text ) . '"><i class="fa fa-lock" aria-hidden="true"></i>' . esc_html( $order_button_text ) . '</button>'; // @codingStandardsIgnoreLine
return $button_html;
}
CSS (измените его в соответствии с вашими желаниями)
/* START - Checkout Page */
.place-order-button {font-size:20px!important;margin-top: 20px!important;float: right!important;background: #fdb933 !important;color: #000000!important;border-radius: 5px!important;box-shadow: 0 2px 5px 0 rgba(213,217,217,.5)!important;}
.place-order-button:hover {background: #fdac0c!important;}
.place-order-button i {padding-bottom: 6px;margin-right: 10px;font-size: 22px;}
/* END - Checkout Page */
Ответ или решение
Как добавить иконку замка на кнопку "Завершить заказ" в WooCommerce: подробное руководство
Вам нужно добавить иконку замка на кнопку "Завершить заказ" в WooCommerce, но вы столкнулись с проблемой, когда изменения не отображаются. В этой статье подробно рассмотрим шаги, необходимые для корректного отображения иконки, а также возможные причины проблем.
Обзор ситуации
Вы работаете с кнопкой, имеющей следующий HTML-код:
<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Place order" data-value="Place order">Place order</button>
И хотите добавить иконку Font Awesome в левую часть этой кнопки, чтобы получить:
<button type="submit" class="button alt" ...>
<i class="fa fa-lock"></i> Place order
</button>
Проблема: Изменения не применяются
Вы проделали несколько шагов, включая изменение шаблона payment.php
в дочерней теме и использование фильтра woocommerce_order_button_html
, однако изменения не отображаются. Это связано с тем, что WooCommerce может кэшировать вывод кнопки или использовать другие методы, которые перезаписывают ваши изменения.
Решение проблемы
-
Проверьте кэширование
Убедитесь, что кэширование на вашем сайте (например, плагин кэширования или кэш браузера) отключено при тестировании. Очищайте кэш после каждого изменения. -
Использование фильтра правильно
Попробуйте следующий код в вашемfunctions.php
, который проверяет наличие нужных классов и возлагает на вас полную ответственность за вывод вашей кнопки:add_filter('woocommerce_order_button_html', 'customize_order_button_html'); function customize_order_button_html($button_html) { $order_button_text = 'Place order'; // Формируем HTML для кнопки с иконкой $button_html = '<button type="submit" class="place-order-button button alt" name="woocommerce_checkout_place_order" value="' . esc_attr($order_button_text) . '" data-value="' . esc_attr($order_button_text) . '">'; $button_html .= '<i class="fa fa-lock" aria-hidden="true"></i> ' . esc_html($order_button_text) . '</button>'; return $button_html; }
-
Проверка зависимостей
Убедитесь, что иконки Font Awesome подключены на странице. Добавьте следующий код вheader.php
вашей темы, если иконки не загружаются:<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-
Настройка стилей CSS
Обеспечьте правильное отображение кнопки и иконки с помощью CSS. Например:.place-order-button { font-size: 20px; margin-top: 20px; float: right; background: #fdb933; color: #000; border-radius: 5px; box-shadow: 0 2px 5px rgba(213,217,217,0.5); } .place-order-button:hover { background: #fdac0c; } .place-order-button i { padding-bottom: 6px; margin-right: 10px; font-size: 22px; }
Заключение
Проблема с отображением иконки замка на кнопке "Завершить заказ" в WooCommerce может быть решена с помощью правильного использования фильтров и внимательного подхода к кэшированию и стилям. Если советы, данные выше, не помогли, рекомендуется исследовать наличие конфликтов с другими плагинами или темами. Использование инструментов отладки и внимательное тестирование помогут вам настроить кнопки в соответствии с вашими требованиями.
Если у вас остаются вопросы или потребность в дальнейшей поддержке, не стесняйтесь обращаться за помощью к сообществу разработчиков WooCommerce или к специализированным форумам.