【问题标题】:List all variations displaying their attributes linked to the variation on Woocommerce products loop列出所有变体,显示其与 Woocommerce 产品循环上的变体相关联的属性
【发布时间】:2021-06-03 22:12:34
【问题描述】:

我想为每个属性添加一个链接,以便在点击访问者时选择变体。

基本上为每个术语添加一个链接,如https://exampl.com/product/t-shirt/?attribute_pa_size=l

基于Display Variable Product Attributes and Terms on Woocommerce Archives 答案代码,我尝试使用以下方式插入术语链接:

$term_link = get_term_link( $term );

但它没有提供指向所选产品属性的链接。

感谢任何帮助。

【问题讨论】:

  • 这只有在您拥有具有一个变体属性的可变产品并且在这种情况下您不会使用这种代码时才有可能。
  • 所以你可以总结变化,但不能添加链接?
  • 当你有多个属性时,一个变体的链接是每个属性的术语的组合......所以你不能在术语本身上有一个链接,这将转到一个特定的变体,如一个术语与多种变体有关。
  • 我明白了。但是可以在下拉列表中预先填充这些术语。我只有一个属性“size”
  • 我在下面回答了一些不同的问题:列出所有可见的变体,显示它们与变体相关联的属性。

标签: php wordpress loops woocommerce product-variations


【解决方案1】:

当您有多个属性时,变体的链接是来自每个属性的术语的组合......所以您不能在术语本身上建立链接,这将转到特定的变体,因为一个术语与多种变体。

所以你需要一些不同的东西。最好的方法是列出可变产品的所有可见变体,显示其与产品循环中的变体相关联的属性,如下所示:

add_action( 'woocommerce_after_shop_loop_item', 'product_variable_linked_variations_on_loop', 7 );
function product_variable_linked_variations_on_loop() {
    global $product;

    if( $product->is_type('variable') ) { // Only for variable products
        $output = array(); // Initializing

        // Loop through visible children Ids (variations ids)
        foreach( $product->get_visible_children() as $variation_id ) {
            $variation  = wc_get_product($variation_id); // The varition object instance
            $permalink  = $variation->get_permalink(); // The link to the variation
            $attributes = array(); // Initializing

            // Loop through attributes
            foreach( $variation->get_attributes() as $attribute => $value ) {
                $attribute_label = wc_attribute_label( $attribute, $product );
                $attribute_value = $variation->get_attribute($attribute);
                $attributes[]    = $attribute_label . ': ' . $attribute_value;
            }
            $output[] = '<a href="' . $permalink . '">' . implode(', ', $attributes) . '</a>';
        }

        echo '<div class="product-attributes">';
        echo '<span>' . implode('</span><br><span>', $output) . '</span>';
        echo '</div>';
    }
}

代码进入活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多