在产品单页 WooCommerce 上显示自定义和标准产品属性
Show custom AND standard products atrributes on Product Single page WooCommerce
我为此进行了全面搜索,找到了一个很好的代码来显示标准产品属性,但自定义属性(不以 pa_ 开头)没有显示。
首先,设置:
我已经使用 Elementor 创建了一个产品单一模板,通常我只需添加模块附加信息就可以了。我以前做过。 :)
但现在我创建了一个布局,其中这些产品属性显示在一个手风琴中,您不能在其中放置此模块。
所以在网上搜索了很久之后,我找到了一个 来创建一个短代码来调用所有产品属性:
/**
* Attributes shortcode callback on productpage.
*/
function so_39394127_attributes_shortcode( $atts ) {
global $product;
if( ! is_object( $product ) || ! $product->has_attributes() ){
return;
}
// parse the shortcode attributes
$args = shortcode_atts( array(
'attributes' => array_keys( $product->get_attributes() ), // by default show all attributes
), $atts );
// is pass an attributes param, turn into array
if( is_string( $args['attributes'] ) ){
$args['attributes'] = array_map( 'trim', explode( '|' , $args['attributes'] ) );
}
// start with a null string because shortcodes need to return not echo a value
$html = '';
if( ! empty( $args['attributes'] ) ){
foreach ( $args['attributes'] as $attribute ) {
// get the WC-standard attribute taxonomy name
$taxonomy = strpos( $attribute, 'pa_' ) === false ? wc_attribute_taxonomy_name( $attribute ) : $attribute;
if( taxonomy_is_product_attribute( $taxonomy ) ){
// Get the attribute label.
$attribute_label = wc_attribute_label( $taxonomy );
// Build the html string with the label followed by a clickable list of terms.
// Updated for WC3.0 to use getters instead of directly accessing property.
$html .= get_the_term_list( $product->get_id(), $taxonomy, '<li class="prod-attr">' . $attribute_label . ': ' , ', ', '</li>' );
}
}
// if we have anything to display, wrap it in a <ul> for proper markup
// OR: delete these lines if you only wish to return the <li> elements
if( $html ){
$html = '<ul class="product-attributes">' . $html . '</ul>';
}
}
return $html;
}
add_shortcode( 'display_attributes', 'so_39394127_attributes_shortcode' );
在手风琴中添加短代码 [display_attributes] 后,我得到了所有显示的标准 WC 属性,这些属性是通过标准方式创建的:产品 -> 属性 -> 新建。太棒了!
但不是您在产品页面本身内部创建的自定义属性 -> 产品数据 -> 自定义产品属性 -> 添加(我的意思的屏幕截图:https://gyazo.com/f2619c7f11d295f4897b38f08d76453b)
屏幕截图产品页面自定义属性未显示在前面:https://gyazo.com/4c126f7082c6a856d1cf30b712daa37f
我认为这是因为这些自定义产品属性不包含元值前面的 pa_ 部分,例如 pa_type-speaker(自行创建的标准属性)。
如何让自定义属性也显示出来?我试图从上面的代码中删除 pa_ ,但这不起作用,我找不到下一步该做什么。你们能帮帮我吗?谢谢!
Elementor 在这方面帮助了我!
解决方案:
打开产品单品模板页面,连续添加附加信息模块。创建此对象的全局小部件。在选项卡式模块中添加此全局小部件的短代码并完成。 :)
我为此进行了全面搜索,找到了一个很好的代码来显示标准产品属性,但自定义属性(不以 pa_ 开头)没有显示。
首先,设置: 我已经使用 Elementor 创建了一个产品单一模板,通常我只需添加模块附加信息就可以了。我以前做过。 :)
但现在我创建了一个布局,其中这些产品属性显示在一个手风琴中,您不能在其中放置此模块。
所以在网上搜索了很久之后,我找到了一个
/**
* Attributes shortcode callback on productpage.
*/
function so_39394127_attributes_shortcode( $atts ) {
global $product;
if( ! is_object( $product ) || ! $product->has_attributes() ){
return;
}
// parse the shortcode attributes
$args = shortcode_atts( array(
'attributes' => array_keys( $product->get_attributes() ), // by default show all attributes
), $atts );
// is pass an attributes param, turn into array
if( is_string( $args['attributes'] ) ){
$args['attributes'] = array_map( 'trim', explode( '|' , $args['attributes'] ) );
}
// start with a null string because shortcodes need to return not echo a value
$html = '';
if( ! empty( $args['attributes'] ) ){
foreach ( $args['attributes'] as $attribute ) {
// get the WC-standard attribute taxonomy name
$taxonomy = strpos( $attribute, 'pa_' ) === false ? wc_attribute_taxonomy_name( $attribute ) : $attribute;
if( taxonomy_is_product_attribute( $taxonomy ) ){
// Get the attribute label.
$attribute_label = wc_attribute_label( $taxonomy );
// Build the html string with the label followed by a clickable list of terms.
// Updated for WC3.0 to use getters instead of directly accessing property.
$html .= get_the_term_list( $product->get_id(), $taxonomy, '<li class="prod-attr">' . $attribute_label . ': ' , ', ', '</li>' );
}
}
// if we have anything to display, wrap it in a <ul> for proper markup
// OR: delete these lines if you only wish to return the <li> elements
if( $html ){
$html = '<ul class="product-attributes">' . $html . '</ul>';
}
}
return $html;
}
add_shortcode( 'display_attributes', 'so_39394127_attributes_shortcode' );
在手风琴中添加短代码 [display_attributes] 后,我得到了所有显示的标准 WC 属性,这些属性是通过标准方式创建的:产品 -> 属性 -> 新建。太棒了!
但不是您在产品页面本身内部创建的自定义属性 -> 产品数据 -> 自定义产品属性 -> 添加(我的意思的屏幕截图:https://gyazo.com/f2619c7f11d295f4897b38f08d76453b)
屏幕截图产品页面自定义属性未显示在前面:https://gyazo.com/4c126f7082c6a856d1cf30b712daa37f
我认为这是因为这些自定义产品属性不包含元值前面的 pa_ 部分,例如 pa_type-speaker(自行创建的标准属性)。
如何让自定义属性也显示出来?我试图从上面的代码中删除 pa_ ,但这不起作用,我找不到下一步该做什么。你们能帮帮我吗?谢谢!
Elementor 在这方面帮助了我!
解决方案:
打开产品单品模板页面,连续添加附加信息模块。创建此对象的全局小部件。在选项卡式模块中添加此全局小部件的短代码并完成。 :)