Размещение значка замка на кнопке “Оформить заказ” в WooCommerce (WordPress ‘игнорирует’ изменения…)

Вопрос или проблема

Пытаюсь сделать что-то, что, как я думал, будет относительно простым.

Вот кнопка “Оформить заказ” по умолчанию в 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>

  1. через функции

    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 может кэшировать вывод кнопки или использовать другие методы, которые перезаписывают ваши изменения.

Решение проблемы

  1. Проверьте кэширование
    Убедитесь, что кэширование на вашем сайте (например, плагин кэширования или кэш браузера) отключено при тестировании. Очищайте кэш после каждого изменения.

  2. Использование фильтра правильно
    Попробуйте следующий код в вашем 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;
    }
  3. Проверка зависимостей
    Убедитесь, что иконки Font Awesome подключены на странице. Добавьте следующий код в header.php вашей темы, если иконки не загружаются:

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
  4. Настройка стилей 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 или к специализированным форумам.

Оцените материал
Добавить комментарий

Капча загружается...