如何添加带有变体的 WooCommerce 产品属性:2 种方法

已发表: 2021-05-25

您想创建具有不同变体的产品属性吗? 你来对地方了。 在本指南中,我们将向您展示如何添加带有变体的 WooCommerce 产品属性

什么是 WooCommerce 属性?

在 WooCommerce 中,您可以通过属性向您的产品添加信息。 这些属性取决于产品。 例如,服装项目的常见属性是尺寸和颜色,而对于笔记本电脑,它们可能是屏幕尺寸、RAM 和存储容量。

属性的有趣之处在于它们是全局的。 无需将它们应用于每个产品,您只需创建它们并将它们添加到不同的产品中。

属性对于:

  • 可变产品:在创建可变产品之前,您必须为它们定义属性。 这允许您添加产品的变体。
  • 过滤产品:一种常用的过滤方式是基于属性。 例如,用户可能正在寻找一台 15 英寸屏幕的笔记本电脑。

此外,您还可以创建默认产品属性。 有关这方面的更多信息,请查看此完整指南。

现在我们对属性有了更好的理解,让我们看看如何在 WooCommerce 中添加具有变体的产品属性。

如何添加带有变体的 WooCommerce 产品属性

在 WooCommerce 中添加具有变体的产品属性有两种主要方法:

  1. 从 WooCommerce 仪表板
  2. 以编程方式

让我们看看这两个选项。

1) 使用 WooCommerce 仪表板的变体创建产品属性

在 WooCommerce 中添加属性的最简单方法是从属性部分。 为此,在您的仪表板中,转到产品 > 属性。 在那里,您必须选择一个名称和 slug,然后单击“添加属性”按钮来创建一个新的产品属性。

如何添加带有变体的 WooCommerce 产品属性

如前所述,属性是全局的,因此新属性将适用于您商店中的所有产品。

添加产品属性后,您必须添加一些将成为某些产品的变体的术语。

例如,如果属性是屏幕尺寸,则不同的尺寸(13 英寸、15 英寸、17 英寸)将是术语。

这样,您可以组合每个产品的不同属性并创建不同的变体。 例如,您可以获得红色 13 英寸笔记本电脑、蓝色 15 英寸笔记本电脑等。

如您所见,从 WooCommerce 仪表板添加属性和变体非常容易。 但是,如果您需要创建许多变体,则可能会很耗时。 要批量创建具有变化的属性并管理大量属性,您可以使用一些编码。

让我们看看如何以编程方式在 WooCommerce 中添加具有变体的产品属性

2.如何以编程方式创建具有变化的产品属性

如果您具有编码技能,则可以以编程方式添加产品属性及其变体。 如果您想在创建属性时节省时间,这是一个很好的选择,因为您可以批量添加它们。

注意:由于我们将编辑一些核心文件,因此在开始之前,我们建议您:

  • 创建站点的完整备份,以便在出现问题时恢复它
  • 创建子主题:您可以安装任何这些插件或查看本指南来创建一个。 这样,当您将主题更新到新版本时,您的自定义设置不会丢失。

请注意,您应该将自定义代码插入到子主题的functions.php文件中。

备份站点并创建子主题后,在 WordPress 仪表板中转到外观 > 自定义并在右侧列中查找functions.php文件。 然后,将以下代码粘贴到文件末尾。

完整的 PHP 脚本

这是完整的脚本,在下一节中,我们将把它分成几部分并解释每个部分的作用。

 add_action('admin_init', 'QuadLayers_add_product_attributes');

函数 QuadLayers_add_product_attributes(){
    $atts=数组(
        '大小'=>数组('XL','小'),
        '颜色'=>数组('棕色','灰色','黄色'),   
    ); 
    foreach ($atts as $key => $values) { 
       新的 add_attribute($key,$values); 
    }
}

类添加属性{   
     /*
     * 注册一个全球 woocommerce 产品属性类。
     *
     * @param str $nam | 属性名称
     * @param arr $vals | 变化的数组
     * 
     */
    公共函数 __construct($nam,$vals){

                $attrs = 数组();      
                $attributes = wc_get_attribute_taxonomies();                          
                    foreach ($attributes as $key => $value) {
                        array_push($attrs,$attributes[$key]->attribute_name);                    
                    }              
               如果(!in_array($nam,$attrs)){            
                    $args = 数组(
                        'id' => '',
                        '蛞蝓' => $nam,
                        '名称' => __( $nam, 'woocommerce' ),
                        '类型' => '选择',
                        'orderby' => 'menu_order',
                        'has_archives' => 假,
                        '限制' => 1,
                        'is_in_stock' => 1
                    );                    
                   返回 wc_create_attribute( $args ); 
                }               
               $this->add_var($nam,$vals);
    }

    公共函数 add_var($nam,$vals){  
        $taxonomy = 'pa_'.$nam;      
        $term_slug = sanitize_title($nam); 
        // 检查术语是否存在,如果不存在,则创建它(并获取术语 ID)。
        for ($ff=0; $ff term_id;
            }
        }
    }
}

值得注意的是,此脚本不会删除任何现有属性,它只会添加新属性。 如果您尝试添加的属性已经存在,脚本将不会执行任何操作。

此外,请注意,对于此示例,我们添加了一些属性和术语。 您需要编辑以下数组并创建自己的属性。

 函数 QuadLayers_add_product_attributes(){
    $atts=数组(
        'new-attribute'=>array('aside','beside','long','none','short'),        
    ); 

之后前往管理仪表板中的产品 > 属性。 如果一切顺利,您将看到刚刚使用 PHP 脚本添加的属性和术语。

产品属性变化

如果您看不到变化,只需重新加载页面以便它们可以填充。

最重要的是,这些属性也可用于在产品编辑器页面上设置产品变体:

属性现在也可用于设置产品变体,

就是这样! 现在您可以简单地编辑 PHP 脚本并添加您自己的 WooCommerce 产品属性和变体。 您甚至可以通过应用条件逻辑来动态更新它。

脚本是如何工作的?

到目前为止,我们已经向您展示了一个脚本,用于将带有变体的 WooCommerce 产品属性添加到您的商店。 现在让我们对其进行分解,以便您更好地了解它的工作原理并对其进行自定义。

脚本的主要部分是:

钩子
add_action('admin_init', 'QuadLayers_add_product_attributes');

函数 QuadLayers_add_product_attributes(){
    $atts=数组(
        '大小'=>数组('XL','小'),
        '颜色'=>数组('棕色','灰色','黄色'),   
    ); 
    foreach ($atts as $key => $values) { 
       新的 add_attribute($key,$values); 
    }
}

我们使用admin_init()挂钩来启动代码。 你可以在这里使用其他几个钩子,但在我们的例子中,我们喜欢使用这个的脚本的性能。

在挂钩函数中,我们在单个多维数组中定义属性值和变化。 foreach()循环将为主数组的每个元素创建一个属性。

在循环内部,属性由我们的类add_attribute(); .

班上

我们创建了一个 OOP 类,它负责创建属性​​并为其添加一些变体。 这是在每次实例化类时使用上一节中的new add_attribute()进行的。

 类添加属性{   
    公共函数 __construct($nam,$vals){
                $attrs = 数组();      
                $attributes = wc_get_attribute_taxonomies();                          
                    foreach ($attributes as $key => $value) {
                        array_push($attrs,$attributes[$key]->attribute_name);                    
                    }              
               如果(!in_array($nam,$attrs)){            
                    $args = 数组(
                        'id' => '',
                        '蛞蝓' => $nam,
                        '名称' => __( $nam, 'woocommerce' ),
                        '类型' => '选择',
                        'orderby' => 'menu_order',
                        'has_archives' => 假,
                        '限制' => 1,
                        'is_in_stock' => 1
                    );                    
                   返回 wc_create_attribute( $args ); 
                }               
               $this->add_var($nam,$vals);
    }

第一个函数是一个construct() ,它使用wc_create_attribute() WooCommerce 内置函数创建属性,同时还调用第二个函数: add_var()

 公共函数 add_var($nam,$vals){  
        $taxonomy = 'pa_'.$nam;      
        $term_slug = sanitize_title($nam); 
        // 检查术语是否存在,如果不存在,则创建它(并获取术语 ID)。
        对于 ($ff=0; $ff < 计数($vals) ; $ff++) {
            if( ! term_exists( $vals [ $ff ] , $taxonomy ) ){ $term_data = wp_insert_term($vals [ $ff ] , $taxonomy ); $term_id = $term_data['term_id']; } else { $term_id = get_term_by( 'name', $vals [ $ff ] , $taxonomy )->term_id; } } }

第二个函数add_var()将添加原始数组中包含的所有变体,用于它也通过函数传递的属性。

结论

总之,产品属性允许您创建可变产品并帮助用户根据某些功能过滤产品。

在本指南中,我们看到了在 WooCommerce 中添加具有变体的产品属性的两种不同方法:

  1. 从管理仪表板
  2. 以编程方式

从 WooCommerce 仪表板创建属性很容易。 但是,如果您需要为多个产品添加许多属性,则可能会很耗时。

或者,如果您具有编码技能,则可以以编程方式创建它们。 这是一种更高级的方法,允许您批量添加产品属性。 我们在这篇文章中使用的脚本已经过全面测试并且可以正常工作,因此请随意将其作为基础并对其进行自定义。 但是,请记住,它旨在用于单个上传属性,我们不建议您将其永久部署到生产环境中。

如果您在尝试运行脚本时遇到错误,请不要担心。 这通常是因为您在属性列表页面上。 更新脚本的正确方法是重新加载 WordPress 管理仪表板的永久链接页面。

有关如何以编程方式和从管理仪表板正确添加 WooCommerce 产品的更多信息,请查看本指南。

您是否在商店中创建了产品属性? 您使用了哪种方法? 在下面的评论中让我们知道!