如何添加帶有變體的 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 產品的更多信息,請查看本指南。

您是否在商店中創建了產品屬性? 您使用了哪種方法? 在下面的評論中讓我們知道!