我想用html元素woocommerce改变“缺货”文本。 目前,我正在使用:
add_filter( 'woocommerce_get_availability', 'change_out_of_stock_text', 1, 2);
function change_out_of_stock_text( $availability, $_product ) {
global $post;
if ( ! $_product->is_in_stock() ) {
$out_of_stock = "Out of Stock";
if(get_post_meta( $post->ID, '_text_field', true )!="") {
$out_of_stock = get_post_meta( $post->ID, '_text_field', true );
}
$availability['availability'] = __($out_of_stock, 'woocommerce');
}
return $availability;
}
它可以使用我在产品页面中创建的自定义输入字段中的值来更改“缺货”文本,但我还想显示从该值到商店页面的html元素。例如,如果值为“售完”,则应输出链接文本以及“售完”。
我也尝试过woocommerce_stock_html,但它遇到了同样的问题:
function change_out_of_stock_text( $html, $_availability, $_product ){
global $post;
$out_of_stock = "Out of Stock";
$_availability = $_product->get_availability();
if(get_post_meta( $post->ID, '_text_field', true )!="") {
$out_of_stock = get_post_meta( $post->ID, '_text_field', true );
}
$html = '<p class="stock ' . esc_attr( $_availability['class'] ) . '">' . $out_of_stock . '</p>';
return $html;
}
add_filter( 'woocommerce_stock_html', 'change_out_of_stock_text', 10, 3 );
答案 0 :(得分:1)
好像你有正确的想法,但你没有针对适当的过滤器woocommerce_get_availability
function so_34126704_availability( $array, $product ){
if ( ! $_product->is_in_stock() ) && ( $status = get_post_meta( $product->id, '_text_field', true ) ) != "" ){
$availability['availability'] = $status;
}
return $array;
}
add_filter( 'woocommerce_get_availability', 'so_34126704_availability', 10, 2 );
过滤输出html,您需要过滤woocommerce_stock_html
。它有点半生不熟,因为我不知道你想要对这些类或你要链接的地方做什么,但这里有一个shell的例子:
功能so_34126704_availability_html($ html,$ _availability,$ product){ $ availability = $ product-&gt; get_availability(); //由于某种原因,$ _availability不会传递整个数组,只传递可用性键 $ status = get_post_meta($ product-&gt; id,&#39; _text_field&#39;,true);
$html = '<p class="stock ' . esc_attr( $availability['class'] ) . '"><a href="#somewhere"/>' . esc_html( $status ) . '</a></p>';
return $html;
} add_filter(&#39; woocommerce_stock_html&#39;,&#39; so_34126704_availability_html&#39;,10,3);