代码之家  ›  专栏  ›  技术社区  ›  Eric

在WooCommerce的存档页面上获取特定产品属性的段塞列表

  •  3
  • Eric  · 技术社区  · 6 年前

    我需要在产品概述(分类,归档)页面上基于一组成分(这是一个woo产品属性)显示一些自定义图标。

    我想在 woocommerce_after_shop_loop_item_title 那是展示我想要的东西的合适地方。但是,我无法轻松获得属性的slug列表。我的目标是得到一系列的弹头 ['onion', 'fresh-lettuce', 'cheese'] 或者别的什么。

    我目前的尝试是:

    add_filter( 'woocommerce_after_shop_loop_item_title', function () {
        global $product;
        $attrs = $product->get_attributes();
        $slugs = $attrs->get_slugs( 'ingredients' );
        var_dump( $slugs );
    });
    

    但这行不通。

    注意 $product->get_attributes() 有效,但对于分类页面上的每个产品都是相同的。

    请告知!

    1 回复  |  直到 6 年前
        1
  •  3
  •   LoicTheAztec    6 年前

    WC_Product get_attribute()

    add_filter( 'woocommerce_after_shop_loop_item_title', 'loop_display_ingredients', 15 );
    function loop_display_ingredients() {
        global $product;
        // The attribute slug
        $attribute = 'ingredients';
        // 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>';
    }
    


    现在如果你想的话 在昏迷分隔列表中,您将使用以下内容:

    // The attribute slug
    $attribute = 'ingredients';
    // Get attribute term names in a coma separated string
    $term_names = $product->get_attribute( $attribute );
    
    // Get the array of the WP_Term objects
    $term_slugs = array();
    $term_names = str_replace(', ', ',', $term_names);
    $term_names_array = explode(',', $term_names);
    if(reset($term_names_array)){
        foreach( $term_names_array as $term_name ){
            // Get the WP_Term object for each term name
            $term = get_term_by( 'name', $term_name, 'pa_'.$attribute );
            // Set the term slug in an array
            $term_slugs[] = $term->slug;
        }
        // Display a coma separted string of term slugs
        echo '<p>' . implode(', ', $term_slugs); . '</p>';
    }