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

Posted

技术标签:

【中文标题】在产品标题下方显示 woocommerce 产品属性 slug【英文标题】:Showing woocommerce product attribute slugs underneath product title 【发布时间】:2022-01-02 17:20:07 【问题描述】:

我已经尝试了大约三天来让我的 4 个 woocommerce 产品属性 slug 而不是名称显示在产品下方。

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

    /**
 * 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 编码员,所以我一直在努力让它工作。

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

期待您的回复,这样我就可以继续店里的其他工作了!

【问题讨论】:

【参考方案1】:

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

Wordpress Woocommerce Show attributes on shop page

我刚刚在最近的 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;

【讨论】:

感谢您的回复。我以前一直在看那个代码。但我正在努力获得相同的“外观和感觉”。对输出进行样式化是一项艰巨的任务,因为它们都是一次性生成的,而不是循环生成的。此外,它确实包含名称,但去掉了“.$label_name”。关于我猜的 $attr_output 修复。我确实喜欢以 | 之类的结尾。年度 | 80cm |哈代 |并且能够单独设置样式。 实际上现在几乎可以正常工作了。谢谢你的分享。我只需要将其限制为仅显示 4 个值而不是全部。但我想我可以通过预定义而不是自动拉取来做到这一点。这么多不同的产品只是麻烦。 啊,是的,这是真的。您始终可以根据自己的喜好限制结果。只需在 foreach 上方放置一个 $index = 0,然后在循环之后放置一个 $index++。并为将数据添加到 $attr_output 变量 if($index 感谢您的插件。这使它完全按照我的意愿工作!【参考方案2】:

将以下代码 sn-p 添加到 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 产品属性 slug的主要内容,如果未能解决你的问题,请参考以下文章

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

php [在存档页面上显示产品尺寸]在存档页面上显示WooCommerce 3.0+产品尺寸,位于产品标题下方。

在 WooCommerce 中的标题下方显示循环产品类别项目描述

Wordpress Woocommerce - 标题下方的可变产品价格

在 WooCommerce 购物车页面中的每个产品下方添加运输类别

php [显示产品属性存档链接]在产品页面上显示WooCommerce产品属性存档链接,位于添加到购物车b的正下方