我正在尝试从wc_cart_functions.php文件中的woocommerce中的按钮中删除一个类。 wc_add_to_cart_message
函数中有一个字符串,用于插入此字符串:
<a href="%s" class="button wc-forward">%s</a> %s
function wc_add_to_cart_message( $products, $show_qty = false ) {
$titles = array();
$count = 0;
if ( ! is_array( $products ) ) {
$products = array( $products );
$show_qty = false;
}
if ( ! $show_qty ) {
$products = array_fill_keys( array_keys( $products ), 1 );
}
foreach ( $products as $product_id => $qty ) {
$titles[] = ( $qty > 1 ? absint( $qty ) . ' × ' : '' ) . sprintf( _x( '“%s”', 'Item name in quotes', 'woocommerce' ), strip_tags( get_the_title( $product_id ) ) );
$count += $qty;
}
$titles = array_filter( $titles );
$added_text = sprintf( _n( '%s has been added to your cart.', '%s have been added to your cart.', $count, 'woocommerce' ), wc_format_list_of_items( $titles ) );
// Output success messages
if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue Shopping', 'woocommerce' ), esc_html( $added_text ) );
} else {
$message = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View Cart', 'woocommerce' ), esc_html( $added_text ) );
}
wc_add_notice( apply_filters( 'wc_add_to_cart_message', $message, $product_id ) );
}
我尝试创建一个只替换该特定字符串的过滤器,因为它出现两次,在两个实例中我都希望删除该类。这似乎不起作用:
add_filter( 'wc_add_to_cart_message', 'add_to_cart_mod');
function add_to_cart_mod($message) {
$message = str_replace ( '<a href="%s" class="button wc-forward">%s</a> %s' , '<a href="%s" class="button">%s</a> %s', $message );
return $message;
}
按原样设置此滤镜,我仍然会看到具有相同未更改类的按钮。有什么想法吗?
答案 0 :(得分:1)
您的过滤器希望找到%s
,但之前的sprintf
调用取代了这些内容:这些%s
已不再存在。
您可以尝试使用正则表达式:
$message = preg_replace ('/(<a [^>]+ )class="button wc-forward"/',
'$1class="button"', $message );
[^>]+
部分表示:任何不包含>
的字符序列(a
标记的结尾)。
$1
表示:括号之间匹配的内容。它可能类似于<a href="http://example.com"
。
答案 1 :(得分:0)
你可以试试这个:
add_filter( 'wc_add_to_cart_message', 'add_to_cart_mod');
function add_to_cart_mod( $message ) {
// Output success messages
if ( 'yes' === get_option( 'woocommerce_cart_redirect_after_add' ) ) {
$return_to = apply_filters( 'woocommerce_continue_shopping_redirect', wc_get_raw_referer() ? wp_validate_redirect( wc_get_raw_referer(), false ) : wc_get_page_permalink( 'shop' ) );
$message = sprintf( '<a href="%s" class="button">%s</a> %s', esc_url( $return_to ), esc_html__( 'Continue Shopping', 'woocommerce' ), esc_html( $added_text ) );
} else {
$message = sprintf( '<a href="%s" class="button">%s</a> %s', esc_url( wc_get_page_permalink( 'cart' ) ), esc_html__( 'View Cart', 'woocommerce' ), esc_html( $added_text ) );
}
return $message;
}