WooCommerce 检查产品属性是否有价值

WooCommerce check if product attribute has value

我正在尝试修改现有的 Woo 代码片段以更改价格的显示方式。如果可变产品上存在特定属性,我需要显示特定文本。

我认为这可能有效 >

$my_terms = get_the_terms( $product->id, 'pa_pricing');

    if (in_array('rent', $my_terms)) {$price_text = sprintf('%s: ', __('is rental', 'wcvp_range'));} else {$price_text = sprintf('%s: ', __('no rental here', 'wcvp_range'));};

或者这个

if ( has_term( 'Rent', 'pa_pricing' )) {$price_text = sprintf('%s: ', __('is rental', 'wcvp_range'));} else {$price_text = sprintf('%s: ', __('no rental here', 'wcvp_range'));};

以上均无效....

这是为了插入此代码(在 functions.php 中)并最终替换 $wcv_price 中的文本,如果找不到单词 'Rent' 作为价格属性。我显然不是 php 天才.... :)

function wc_varb_price_range( $wcv_price, $product ) {
 
    $prefix = sprintf('%s: ', __('Rent from', 'wcvp_range'));
 
    $wcv_reg_min_price = $product->get_variation_regular_price( 'min', true );
    $wcv_reg_max_price = $product->get_variation_regular_price( 'max', true );
    $wcv_min_sale_price    = $product->get_variation_sale_price( 'min', true );
    $wcv_max_sale_price    = $product->get_variation_sale_price( 'max', true );
    $wcv_max_price = $product->get_variation_price( 'max', true );
    $wcv_min_price = $product->get_variation_price( 'min', true );

    $wcv_price = ( $wcv_min_sale_price == $wcv_reg_min_price ) ?
        wc_price( $wcv_reg_min_price ) :
        '<del>' . wc_price( $wcv_reg_min_price ) . '</del>' . '<ins>' . wc_price( $wcv_min_sale_price ) . '</ins>';
        
    $wcv_bo_price = ( $wcv_max_sale_price == $wcv_reg_max_price ) ?
        wc_price( $wcv_reg_max_price ) :
        '<del>' . wc_price( $wcv_reg_max_price ) . '</del>' . '<ins>' . wc_price( $wcv_max_sale_price ) . '</ins>';    
 
    return ( $wcv_min_price == $wcv_max_price ) ?
        $wcv_price :
        sprintf('%s%s', $prefix, $wcv_price)." per month <br> Buy for <span class='woocommerce-Price-amount amount'>".$wcv_bo_price."</span>";

}

add_filter( 'woocommerce_variable_sale_price_html', 'wc_varb_price_range', 10, 2 ); 
add_filter( 'woocommerce_variable_price_html', 'wc_varb_price_range', 10, 2 );

要获取产品属性的值,您可以在产品 class.

上使用 get_attribute() 方法

示例:

$pricing = $product->get_attribute( 'pricing' );

此方法将return一个字符串。

如果给定属性可能有多个值,情况会稍微复杂一些。 get_attribute() 将 return 一个逗号分隔的值字符串。在这种情况下,您需要将其转换回数组。

示例:

$pricing = explode( ', ', $product->get_attribute( 'pricing' ) );

完整版检查:

// If you know that 'pricing' will only ever be a single value.
if ( 'rent' == $product->get_attribute( 'pricing' ) ) {
  // . . .


// If you believe that the pricing attribute may have multiple values.
$pricing = explode( ', ', $product->get_attribute( 'pricing' ) );

if ( in_array( 'rent', $pricing ) ) {
    // . . .