如何覆盖这些WooCommerce小部件购物车按钮功能

时间:2017-07-03 作者:odtcreative

我已经尝试了大约20种不同的方法来解决这个问题,但没有解决方案。

我正在尝试更改WooCommerce迷你购物车小部件中按钮的类别,如下所示。

enter image description here

这些按钮的标记写在wc模板函数内的两个函数中。php文件:

if ( ! function_exists( \'woocommerce_widget_shopping_cart_button_view_cart\' ) ) {

        /**
         * Output the proceed to checkout button.
         *
         * @subpackage  Cart
         */
        function woocommerce_widget_shopping_cart_button_view_cart() {
            echo \'<a href="\' . esc_url( wc_get_cart_url() ) . \'" class="button wc-forward">\' . esc_html__( \'View cart\', \'woocommerce\' ) . \'</a>\';
        }
    }

    if ( ! function_exists( \'woocommerce_widget_shopping_cart_proceed_to_checkout\' ) ) {

        /**
         * Output the proceed to checkout button.
         *
         * @subpackage  Cart
         */
        function woocommerce_widget_shopping_cart_proceed_to_checkout() {
            echo \'<a href="\' . esc_url( wc_get_checkout_url() ) . \'" class="button checkout wc-forward">\' . esc_html__( \'Checkout\', \'woocommerce\' ) . \'</a>\';
        }
    }
在我自己的主题中重写这些函数的正确方法是什么,以便我可以更改这两个按钮的类?

2 个回复
SO网友:Mat

不确定您是否仍然需要帮助,但这可能会帮助您处境中的其他人。

如果要更改<p> 标记在您的示例中,您需要编辑的文件可以在中找到/wp-content/plugins/woocommerce/templates/cart/mini-cart.php

显然,不要直接编辑文件。将其复制到您的主题(或者最好是子主题)文件夹中/wp-content/themes/your-theme-folder/woocommerce/cart/mini-cart.php 您可以编辑第75行以放入自己的CSS类。第75行显示:

<p class="woocommerce-mini-cart__buttons buttons"><?php do_action( \'woocommerce_widget_shopping_cart_buttons\' ); ?></p>
如果要更改<a> 标记,然后您需要删除默认的“操作”,并在您的主题(或者最好是子主题)中创建自己的操作functions.php 文件,例如。

remove_action( \'woocommerce_widget_shopping_cart_buttons\', \'woocommerce_widget_shopping_cart_button_view_cart\', 10 );
remove_action( \'woocommerce_widget_shopping_cart_buttons\', \'woocommerce_widget_shopping_cart_proceed_to_checkout\', 20 );

function my_woocommerce_widget_shopping_cart_button_view_cart() {
    echo \'<a href="\' . esc_url( wc_get_cart_url() ) . \'" class="btn btn-default">\' . esc_html__( \'View cart\', \'woocommerce\' ) . \'</a>\';
}
function my_woocommerce_widget_shopping_cart_proceed_to_checkout() {
    echo \'<a href="\' . esc_url( wc_get_checkout_url() ) . \'" class="btn btn-default">\' . esc_html__( \'Checkout\', \'woocommerce\' ) . \'</a>\';
}
add_action( \'woocommerce_widget_shopping_cart_buttons\', \'my_woocommerce_widget_shopping_cart_button_view_cart\', 10 );
add_action( \'woocommerce_widget_shopping_cart_buttons\', \'my_woocommerce_widget_shopping_cart_proceed_to_checkout\', 20 );
您需要清除浏览器缓存或向购物车添加其他项目,以便在购物车内容保存在浏览器会话存储中时查看更改,以避免在每个页面上提取新副本。

SO网友:Ruvee

旧答案中的代码不再有效。The approach is still valid 但代码不起作用。因此,下面的代码目前可以运行,您可以将其插入functions.php. (April 2021):

向Mat大声喊,谢谢你的回答。

function custom_widget_cart_btn_view_cart()
{
  echo \'<a href="\' . esc_url(wc_get_cart_url()) . \'" class="button wc-forward">\' . esc_html__(\'Custom View Cart\', \'woocommerce\') . \'</a>\';
}

function custom_widget_cart_checkout()
{
  echo \'<a href="\' . esc_url(wc_get_checkout_url()) . \'" class="button checkout wc-forward">\' . esc_html__(\'Custom Checkout\', \'woocommerce\') . \'</a>\';
}

function custom_widget_cart_subtotal()
{
  echo \'<strong>\' . esc_html__(\'Custom Subtotal: \', \'woocommerce\') . \'</strong> \' . WC()->cart->get_cart_subtotal();
}

remove_action(\'woocommerce_widget_shopping_cart_total\', \'woocommerce_widget_shopping_cart_subtotal\', 10);
remove_action(\'woocommerce_widget_shopping_cart_buttons\', \'woocommerce_widget_shopping_cart_button_view_cart\', 10);
remove_action(\'woocommerce_widget_shopping_cart_buttons\', \'woocommerce_widget_shopping_cart_proceed_to_checkout\', 20);

add_action(\'woocommerce_widget_shopping_cart_total\', \'custom_widget_cart_subtotal\', 11);
add_action(\'woocommerce_widget_shopping_cart_buttons\', \'custom_widget_cart_btn_view_cart\', 12);
add_action(\'woocommerce_widget_shopping_cart_buttons\', \'custom_widget_cart_checkout\', 21);

结束

相关推荐