如何更改块按钮的“购物车”文本?

问题描述 投票:0回答:1

[编辑:通过翻译解决]

解决方案:

    add_filter( 'gettext', function( $translated_text, $text, $domain ) {
    if ( 'woocommerce' === $domain && '%s in cart' === $text ) {
        $translated_text = '%s product(s) in your cart';
    }
    return $translated_text;
    }, 10, 3 );

我之前使用过“%d in cart”。

Woocommerce AddToCart 按钮的默认行为是首先显示“添加到购物车”。点击后,它将进入加载状态并检查ajax请求,然后显示“in cart {number}”。

我找不到任何可以挂钩的操作/过滤器。我可以通过多种不同的方式更改“添加到购物车”文本:挂钩、翻译、CSS 等。但对于后一种状态,JavaScript 负责,因此,甚至翻译也不起作用。

虽然我非常喜欢这个功能,但我必须找到一种方法用图标替换“购物车”,同时保留 {number} 部分。

如果您有稳健且干净的方法来执行此操作,请告诉我。

提前谢谢您。

我尝试重现 html 的结构,甚至是 wp-data 属性,但我无法走得太远,因为在用默认的 woocommerce html 替换它之后,交互性消失了。

我不太擅长Javascript,但尽管看起来很丑陋,我什至尝试用一个脚本来更改它,该脚本查找addedtocart事件,并更改文本。徒劳无功...

最明显的方法是从头开始创建一个自定义按钮,但我现在无法做到这一点,因为我还有其他要求要交付。

我也尝试了 Chatgpt 所提供的丰富知识,但没有成功。

javascript php css woocommerce wordpress-block-theme
1个回答
0
投票

您可以编写自定义 JavaScript 来执行此操作 当按钮文本更改为“in cart {number}”时,将文本“in cart”动态替换为您所需的图标(例如,使用 HTML 或 FontAwesome 图标)。

您可以在主题的custom.js或function.php脚本文件中编写javascript代码

这是简单的 .js 代码,您可以将其粘贴到主题中的 custom.js 中

document.addEventListener('DOMContentLoaded', function () {
    // Listen for changes in WooCommerce block buttons
    const observer = new MutationObserver(function (mutationsList) {
        for (let mutation of mutationsList) {
            if (mutation.type === 'childList') {
                const target = mutation.target;
                // Check if the button text contains "in cart"
                if (target.innerText.includes('in cart')) {
                    const match = target.innerText.match(/(\d+)/); // Extract the number
                    if (match) {
                        const number = match[1];
                        // Replace button content with custom icon and number
                        target.innerHTML = `<span style="display: inline-flex; align-items: center;">
                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-cart-check" viewBox="0 0 16 16">
                              <path d="M10.97 4.97a.235.235 0 0 0-.304.304l1.28 3.211a.25.25 0 0 0 .233.176h2.54a.25.25 0 0 0 .234-.176l1.28-3.211a.235.235 0 0 0-.305-.304l-3.213 1.28a.235.235 0 0 0-.176.233v2.54a.235.235 0 0 0 .176.234l3.213 1.28a.235.235 0 0 0 .305-.305l-1.28-3.213a.25.25 0 0 0-.233-.176h-2.54a.25.25 0 0 0-.234.176l-1.28 3.213a.235.235 0 0 0 .305.305l3.213-1.28a.235.235 0 0 0 .176-.233v-2.54a.235.235 0 0 0-.176-.234l-3.213-1.28z"/>
                              <path d="M5.5 1a1.5 1.5 0 0 1 1.415 1H13a.5.5 0 0 1 .485.621l-1 4a.5.5 0 0 1-.485.379H5.415a1.5 1.5 0 0 1-1.415 1A1.5 1.5 0 0 1 3 7.5V2.5A1.5 1.5 0 0 1 4.5 1zm0 1A.5.5 0 0 0 5 2.5v5a.5.5 0 0 0 0 1h7.565a.5.5 0 0 0 .485-.621l-1-4a.5.5 0 0 0-.485-.379H5z"/>
                            </svg>
                            &nbsp; ${number}
                        </span>`;
                    }
                }
            }
        }
    });

    // Target WooCommerce Add to Cart Buttons
    const buttons = document.querySelectorAll('.wp-block-button__link'); // Adjust selector if needed
    buttons.forEach(button => {
        observer.observe(button, { childList: true, subtree: true });
    });
});

function custom_add_to_cart_button_script() {
    wp_enqueue_script('custom-add-to-cart', get_template_directory_uri() . '/js/custom.js', array('jquery'), false, true);
}
add_action('wp_enqueue_scripts', 'custom_add_to_cart_button_script');



add_action('wp_footer', function () {
    ?>
    <script>
    /* Paste the JavaScript code here */
    </script>
    <?php
});

这里介绍了如何将 .js 函数添加到您的网站

© www.soinside.com 2019 - 2024. All rights reserved.