Wordpress Woocommerce - 使用update_post_meta添加产品属性

Dan*_*iel 9 php wordpress woocommerce

我客户网站上的产品需要我通过产品 - > Wordpress管理中的属性添加的某些属性.在这个导入脚本我编码我需要使用该函数update_post_meta($post_id, $meta_key, $meta_value)导入适当的属性和值.

目前我有这样的功能:

update_post_meta( $post_id, '_product_attributes', array());
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何正确传递属性及其值?

Dan*_*iel 15

是的,所以我花了一段时间来弄清楚自己,但我终于设法通过编写以下函数来做到这一点:

// @param int $post_id - The id of the post that you are setting the attributes for
// @param array[] $attributes - This needs to be an array containing ALL your attributes so it can insert them in one go
function wcproduct_set_attributes($post_id, $attributes) {
    $i = 0;
    // Loop through the attributes array
    foreach ($attributes as $name => $value) {
        $product_attributes[$i] = array (
            'name' => htmlspecialchars( stripslashes( $name ) ), // set attribute name
            'value' => $value, // set attribute value
            'position' => 1,
            'is_visible' => 1,
            'is_variation' => 1,
            'is_taxonomy' => 0
        );

        $i++;
    }

    // Now update the post with its new attributes
    update_post_meta($post_id, '_product_attributes', $product_attributes);
}

// Example on using this function
// The attribute parameter that you pass along must contain all attributes for your product in one go
// so that the wcproduct_set_attributes function can insert them into the correct meta field.
$my_product_attributes = array('hdd_size' => $product->hdd_size, 'ram_size' => $product->ram_size);

// After inserting post
wcproduct_set_attributes($post_id, $my_product_attributes);

// Woohay done!
Run Code Online (Sandbox Code Playgroud)

如果他们需要在WooCommerce中以编程方式导入多个属性,我希望此功能可以帮助其他人!


小智 6

我试过丹尼尔的答案,但这对我没用.可能是Wordpress/Woocommerce代码已经发生变化,或者我可能不太明白该怎么做,但无论哪种方式代码都没有为我做任何事情.然而,在使用它作为基础的大量工作之后,我想出了这段代码并将它放在我的主题上functions.php:

function wcproduct_set_attributes($id) {

    $material = get_the_terms( $id, 'pa_material');

    $material = $material[0]->name;

    // Now update the post with its new attributes
    update_post_meta($id, '_material', $material);

}

// After inserting post
add_action( 'save_post_product', 'wcproduct_set_attributes', 10);
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以将我在WooCommerce安装中设置为"材料"的内容作为自定义属性,并将其添加到正式元作为_material.这又允许我使用的代码片段另一个所以WooCommerce搜索功能延伸到元字段,这意味着我可以搜索在WooCommerce搜索领域的材料,并与该材料的所有项目出现.

我希望这对某人有用.