显示为 WooCommerce 产品设置的所有产品属性的简码
Shortcode that display all product attributes set for a WooCommerce product
我一直在寻找一种方法来做到这一点,但不幸的是我找不到任何东西。
我试图在单个产品的自定义位置显示所有产品的属性和值,用竖线分隔(为此我想创建一个短代码,这样我就可以把它放在任何地方想)。输出将是这样的:
品牌:雷诺 |型号:12 |年份:1973
Woocommerce模板上的代码product-attributes.php单品页面列出了当前商品的属性,但是会列出一些样式我不想在不想要的地方
我想用该代码创建一个简码,即:
<?php foreach ( $product_attributes as $product_attribute_key => $product_attribute ) : ?>
<?php echo wp_kses_post( $product_attribute['label'] ); ?>: <?php echo wp_kses_post( $product_attribute['value'] ); ?> |
<?php endforeach; ?>
如何使用它创建短代码?我知道一个短代码的一般代码,但我不知道如何将上面的代码实际集成到其中:
function custom_attributes_product_page() {
// integrate the required code
// Output needs to be return
return
}
// register shortcode
add_shortcode('custom-attributes', 'custom_attributes_product_page');
如果这个简码能列出由一列分隔的属性及其值,就像我上面说的那样,那就太好了(怎么做?)
非常感谢任何帮助。
尝试以下简码,它会显示为产品设置的所有产品属性及其值,同时处理自定义属性:
function get_product_attributes_shortcode($atts ) {
// Extract shortcode attributes
extract( shortcode_atts( array(
'id' => get_the_ID(),
), $atts, 'display-attributes' ) );
global $product;
if ( ! is_a($product, 'WC_Product') ) {
$product = wc_get_product( $id );
}
if ( is_a($product, 'WC_Product') ) {
$html = []; // Initializing
foreach ( $product->get_attributes() as $attribute => $values ) {
$attribute_name = wc_attribute_label($values->get_name());
$attribute_data = $values->get_data();
$is_taxonomy = $attribute_data['is_taxonomy'];
$option_values = array(); // Initializing
// For taxonomy product attribute values
if( $is_taxonomy ) {
$terms = $values->get_terms(); // Get attribute WP_Terms
// Loop through attribute WP_Term(s)
foreach ( $terms as $term ) {
$term_link = get_term_link( $term, $attribute );
$option_values[] = '<a href="'.$term_link.'">'.$term->name.'</a>';
}
}
// For "custom" product attributes values
else {
// Loop through attribute option values
foreach ( $values->get_options() as $term_name ) {
$option_values[] = $term_name;
}
}
$html[] = '<strong>' . $attribute_name . '</strong>: ' . implode(', ', $option_values);
}
return '<div class="product-attributes">' . implode(' | ', $html) . '<div>';
}
}
add_shortcode( 'display-attributes', 'get_product_attributes_shortcode' );
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
USAGE: [display-attributes]
或具有定义的产品 ID [display-attributes id="254"]
您将得到如下显示:BRAND: RENAULT | 型号: 12 | 年份: 1973
如果您不想要链接的条款,请替换:
$term_link = get_term_link( $term, $attribute );
$option_values[] = '<a href="'.$term_link.'">'.$term->name.'</a>';
通过这个:
$option_values[] = $term->name;
我一直在寻找一种方法来做到这一点,但不幸的是我找不到任何东西。
我试图在单个产品的自定义位置显示所有产品的属性和值,用竖线分隔(为此我想创建一个短代码,这样我就可以把它放在任何地方想)。输出将是这样的:
品牌:雷诺 |型号:12 |年份:1973
Woocommerce模板上的代码product-attributes.php单品页面列出了当前商品的属性,但是会列出一些样式我不想在不想要的地方
我想用该代码创建一个简码,即:
<?php foreach ( $product_attributes as $product_attribute_key => $product_attribute ) : ?>
<?php echo wp_kses_post( $product_attribute['label'] ); ?>: <?php echo wp_kses_post( $product_attribute['value'] ); ?> |
<?php endforeach; ?>
如何使用它创建短代码?我知道一个短代码的一般代码,但我不知道如何将上面的代码实际集成到其中:
function custom_attributes_product_page() {
// integrate the required code
// Output needs to be return
return
}
// register shortcode
add_shortcode('custom-attributes', 'custom_attributes_product_page');
如果这个简码能列出由一列分隔的属性及其值,就像我上面说的那样,那就太好了(怎么做?)
非常感谢任何帮助。
尝试以下简码,它会显示为产品设置的所有产品属性及其值,同时处理自定义属性:
function get_product_attributes_shortcode($atts ) {
// Extract shortcode attributes
extract( shortcode_atts( array(
'id' => get_the_ID(),
), $atts, 'display-attributes' ) );
global $product;
if ( ! is_a($product, 'WC_Product') ) {
$product = wc_get_product( $id );
}
if ( is_a($product, 'WC_Product') ) {
$html = []; // Initializing
foreach ( $product->get_attributes() as $attribute => $values ) {
$attribute_name = wc_attribute_label($values->get_name());
$attribute_data = $values->get_data();
$is_taxonomy = $attribute_data['is_taxonomy'];
$option_values = array(); // Initializing
// For taxonomy product attribute values
if( $is_taxonomy ) {
$terms = $values->get_terms(); // Get attribute WP_Terms
// Loop through attribute WP_Term(s)
foreach ( $terms as $term ) {
$term_link = get_term_link( $term, $attribute );
$option_values[] = '<a href="'.$term_link.'">'.$term->name.'</a>';
}
}
// For "custom" product attributes values
else {
// Loop through attribute option values
foreach ( $values->get_options() as $term_name ) {
$option_values[] = $term_name;
}
}
$html[] = '<strong>' . $attribute_name . '</strong>: ' . implode(', ', $option_values);
}
return '<div class="product-attributes">' . implode(' | ', $html) . '<div>';
}
}
add_shortcode( 'display-attributes', 'get_product_attributes_shortcode' );
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
USAGE: [display-attributes]
或具有定义的产品 ID [display-attributes id="254"]
您将得到如下显示:BRAND: RENAULT | 型号: 12 | 年份: 1973
如果您不想要链接的条款,请替换:
$term_link = get_term_link( $term, $attribute );
$option_values[] = '<a href="'.$term_link.'">'.$term->name.'</a>';
通过这个:
$option_values[] = $term->name;