使用html元素woocommerce

时间:2015-12-07 04:55:10

标签: wordpress woocommerce

我想用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 );

1 个答案:

答案 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);