如何解决WooCommerce 检查产品属性是否具有值
我正在尝试修改现有的 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: ','wcvp_range'));};
以上都不是......
如果没有找到“Rent”作为价格属性,则将其嵌入此代码(在functions.php 中)并最终替换$wcv_price 中的文本。我显然不是一个 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',2 );
解决方法
要获取产品属性的值,您可以对产品类使用 get_attribute()
方法。
示例:
$pricing = $product->get_attribute( 'pricing' );
此方法将返回一个字符串。
当给定属性可能有多个值时,这会变得稍微复杂一些。 get_attribute()
将返回以逗号分隔的值字符串。在这种情况下,您需要将其转换回数组。
示例:
$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 ) ) {
// . . .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。