在 WooCommerce 属性中使用第二个 foreach 循环将值列为单个 <li> 元素

Using a second foreach loop in WooCommerce attributes list values as single <li> elements

我正在尝试获取产品属性(仅 selected 的)以列表形式显示,如下面第一张图片所示:

不幸的是,我的列表现在是这样的: (如何用另一个 foreach 语句划分值?)

此外,我的 code/shortcode 显示了找到的所有产品属性,并且想使用类似的东西: [product_attributes:sizes|color|print] 到 select我要显示的属性。

add_filter( 'wplister_process_template_html', 'my_wplister_template_filter_product_attributes_list', 10, 3 );
function my_wplister_template_filter_product_attributes_list( $html, $item, $images ) {

    $post_id    = $item['parent_id'] ? $item['parent_id'] : $item['post_id'];
    $attributes = ProductWrapper::getAttributes( $post_id );

    $attributes_list = '';
    foreach ($attributes as $name => $value) {
        $value           = '<li>' . str_replace( '|', ', ', $value ) . '</li>';
        $attributes_list .= '<div>';
        $attributes_list .= '<p>' . $name . ': <p>';
        $attributes_list .= '<ul class="variation">' . $value . '</ul>';
        $attributes_list .= '</ul>';
        $attributes_list .= '</div>';   
    }

    $html = str_replace( '[[product_attributes_list]]', $attributes_list, $html );
    return $html;
}

如何在列表值中使用第二个 foreach 循环作为单个 <li> 元素?

谢谢

我真的无法测试它。我对您的代码进行了一些更改以创建第二个 foreach 循环。

试试这个:

add_filter( 'wplister_process_template_html', 'my_wplister_template_filter_product_attributes_list', 10, 3 );
function my_wplister_template_filter_product_attributes_list( $html, $item, $images ) {

    $post_id    = $item['parent_id'] ? $item['parent_id'] : $item['post_id'];
    $attributes = ProductWrapper::getAttributes( $post_id );

    $attributes_list = '';
    foreach ($attributes as $name => $attr_values) {

        $attributes_list .= '<div>
        <p>' . $name . ': <p>
        <ul class="variation">';

        // Dispaching each attribute values in an array
        $attr_values_arr = explode( '|', $attr_values );

        // The second foreach loop
        foreach ($attr_values_arr as $attr_value){
            $attributes_list .= '<li>' . $attr_value . '</li>';
        }

        $attributes_list .= '</ul>
        </div>';
    }

    $html = str_replace( '[[product_attributes_list]]', $attributes_list, $html );

    return $html;
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

我希望这会奏效。