我想将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();
但这给了我一个错误。有什么想法是如何解决这个问题的?
答案 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标记)
因此,我认为过滤链接本身可能更好:
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' );
}