在产品标题下方显示 woocommerce 产品属性段

Showing woocommerce product attribute slugs underneath product title

我已经尝试了大约三天,以获取我的 4 个 woocommerce 产品属性段而不是显示在产品下方的名称。

到目前为止,我一直在使用这段代码,除了使用属性名称而不是值之外,它似乎确实完全符合我的要求。

    /**
 * Display available attributes.
 * 
 * @return array|void
 */
function iconic_available_attributes() {
    global $product;

    if ( ! $product->is_type( 'variable' ) ) {
        return;
    }

    $attributes = iconic_get_available_attributes( $product );

    if ( empty( $attributes ) ) {
        return;
    }

    foreach ( $attributes as $attribute ) {
        ?>
        <div class="iconic-available-attributes">
            <p class="iconic-available-attributes__title"><?php _e( 'Available', 'iconic' ); ?> <strong><?php echo $attribute['name']; ?></strong></p>

            <ul class="iconic-available-attributes__values">
                <?php foreach ( $attribute['values'] as $value ) { ?>
                    <li class="iconic-available-attributes__value <?php echo $value['available'] ? '' : 'iconic-available-attributes__value--unavailable'; ?>"><?php echo $value['name']; ?></li>
                <?php } ?>
            </ul>
        </div>
        <?php
    }
}


/**
 * Get available attributes.
 *
 * @param WC_Product_Variable $product
 *
 * @return array
 */
/**

 * @snippet       Display Custom Products Attributes on the Products Page

*/

function cw_woo_attribute(){

    global $product;

    $attributes = $product->get_attributes();

    if ( ! $attributes ) {

        return;

    }

    $display_result = '';

    foreach ( $attributes as $attribute ) {

        if ( $attribute->get_variation() ) {

            continue;

        }

        $name = $attribute->get_name();

        if ( $attribute->is_taxonomy() ) {

            $terms = wp_get_post_terms( $product->get_id(), $name, 'all' );

            $cwtax = $terms[0]->taxonomy;

            $cw_object_taxonomy = get_taxonomy($cwtax);

            if ( isset ($cw_object_taxonomy->labels->singular_name) ) {

                $tax_label = $cw_object_taxonomy->labels->singular_name;

            } elseif ( isset( $cw_object_taxonomy->label ) ) {

                $tax_label = $cw_object_taxonomy->label;

                if ( 0 === strpos( $tax_label, 'Product ' ) ) {

                    $tax_label = substr( $tax_label, 8 );

                }

            }
            $display_result .="<span class='attribute'>" .  $tax_label . "</span>";

            $tax_terms = array();

            foreach ( $terms as $term ) {

                $single_term = esc_html( $term->name );

                array_push( $tax_terms);

            }
            $display_result .= implode(', ', $tax_terms);

        } else {

            $display_result .= $name;

            $display_result .= esc_html( implode( ', ', $attribute->get_options() ) );

        }
    }

    echo "<span class='attributeline'>" .  "| " . "</span>" .  $display_result;

}
add_action('woocommerce_shop_loop_item_title', 'cw_woo_attribute', 25);

我在任何方面都不是 PHP 编码员,所以我一直在努力让它工作。

这是当前情况的示例,显示名称:“植物类型”而不是值:“年度”。

期待您的回复,以便我继续处理商店的其他部分!

将以下代码片段添加到 functions.php 以在商店存档的产品下显示逗号分隔的术语名称字符串。

add_filter( 'woocommerce_after_shop_loop_item_title', 'loop_display_attr', 15 );
function loop_display_attr() {
global $product;
// The attribute slug
$attribute = 'attr';
// Get attribute term names in a coma separated string
$term_names = $product->get_attribute( $attribute );

// Display a coma separted string of term names
echo '<p>' . $term_names . '</p>';
}

你能检查这个现有答案吗?

我刚刚在最近安装的 Woocommerce 上对其进行了测试,接受的答案似乎仍然有效。

看看您是否可以通过预定义要显示的属性来使其工作,就像他们在该问题中所做的那样:pa_country、pa_class 等。您可以在以下部分中看到它。

// Define you product attribute taxonomies in the array
$product_attribute_taxonomies = array( 'pa_country', 'pa_class','pa_faction', 'pa_gender' );

如果你不想预定义属性,你仍然可以像下面这样获取它们(也经过测试)。但是对于测试,仅使用预定义的字符串可能会有所帮助,这样您就可以确定它是否正常工作。

$attributes = $product->get_attributes();
$attrs = [];
foreach($attributes as $key => $attribute) :
  $attrs[] = $key;
endforeach;
// just replace the array with attribute names with $attrs
$product_attribute_taxonomies = $attrs;