Php 更改“;“添加到购物车”;将文本添加到产品的价格中

Php 更改“;“添加到购物车”;将文本添加到产品的价格中,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我想将woocommerce中“添加到购物车”按钮的文本更改为该产品的当前价格。使用下面的代码,我可以更改文本。这个很好用 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中“添加到购物车”按钮的文本更改为该产品的当前价格。使用下面的代码,我可以更改文本。这个很好用

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();
但这给了我一个错误。你知道怎么解决这个问题吗

试试

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_文本

或者


您需要通过将接受的参数数设置为2 in,将
$product
传递给函数

但是,这会导致一个问题,因为显示链接的模板正在使用
esc_html()
包装生成的文本,从而导致这种混乱(因为price 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()
    );
}
add_过滤器('woocommerce_loop_add_to_cart_link','woo_custom_cart_button_link',10,2);
功能woo_自定义_购物车_按钮_链接($button_text,$product){
返回sprintf(“”,
esc_url($product->add_to_cart_url()),
esc_属性(isset($数量)?$数量:1),
esc_attr($product->id),
esc_attr($product->get_sku()),
esc_attr(isset($class)$class:‘按钮’),
$product->get_price_html()
);
}

UPDATE
function custom\u woocommerce\u product\u add\u to\u cart\u text($button\u text->'hello!';return\u($button\u text,'woocommerce');}
解决了错误,但现在按钮中没有可见的文本
get\u price\u html()
不是函数。它是一个必须对对象进行操作的类方法,例如:
$product->get\u price\u html()
。所以第二个块比较近,虽然我发现它会产生一些疯狂的按钮文本。product对象在筛选器中可用,可以通过将接受的参数数设置为2来传递。最后,
(按钮文本,'woocommerce')
不正确,因为
$button\u text
现在是一个动态变量,无法翻译。您正在尝试更改什么类型的产品,因为这里有更改外部产品的答案,但OP没有说明。重写模板始终是可能的,但如果使用挂钩/过滤器,更新WC时遇到的问题更少。我只是在指出你回答的问题。
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();
}
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()
    );
}