将“添加到购物车”文字更改为产品的价格

时间:2016-05-05 16:38:01

标签: php wordpress woocommerce

我想将woocommerce中“add-to-cart”按钮的文本更改为该产品的当前价格。使用下面的代码,我可以更改文本。这很好。

add_filter( 'woocommerce_product_add_to_cart_text', 'woo_custom_cart_button_text');
function woo_custom_cart_button_text($button_text) {
$button_text -> 'hello!';
return __($button_text, 'woocommerce' );
}

但现在我想在产品价格中更改该文字。我尝试了以下代码,将第3行替换为:

$button_text->get_price_html();

但这给了我一个错误。有什么想法是如何解决这个问题的?

2 个答案:

答案 0 :(得分:2)

您需要将$product传递给您的函数,方法是将apply_filters()中接受的参数数量设置为2。

add_filter( 'woocommerce_product_add_to_cart_text', 'woo_custom_cart_button_text', 10, 2);
function woo_custom_cart_button_text($button_text, $product) {
    return $product->get_price_html();
}

但是,这会导致问题,因为显示链接的模板使用esc_html()来包装导致此热点混乱的结果文本(因为价格html中包含html标记)

all the spans

因此,我认为过滤链接本身可能更好:

add_filter( 'woocommerce_loop_add_to_cart_link', 'woo_custom_cart_button_link', 10, 2);
function woo_custom_cart_button_link($button_text, $product) {
    return sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
        esc_url( $product->add_to_cart_url() ),
        esc_attr( isset( $quantity ) ? $quantity : 1 ),
        esc_attr( $product->id ),
        esc_attr( $product->get_sku() ),
        esc_attr( isset( $class ) ? $class : 'button' ),
        $product->get_price_html()
    );
}

答案 1 :(得分:0)

...试

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );    // 2.1 +

function woo_custom_cart_button_text() {
        $button_text = get_price_html();
        return __( $button_text, 'woocommerce' );

}

您可能需要使用赋值操作符(=)分配$ button_text。

或者...

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );    // 2.1 +

function woo_custom_cart_button_text() {
        global $post;
        $product = get_product( $post->ID );
        $button_text = $product->get_price_html();
        return __( $button_text, 'woocommerce' );

}