以编程方式添加的属性,设置为自动在产品页面上显示。WooCommerce

时间:2015-02-27 作者:Paul M

我写了一个脚本,将产品导入Woocommerce的新安装。

产品具有在管理中设置的属性。这段代码在导入时添加属性。

update_post_meta($product_id, \'common_name\', $product[\'common_name\']);
wp_set_object_terms($product_id,  $product[\'flowering_period\'], \'pa_flowering\');
wp_set_object_terms($product_id, $product[\'native_plant\'], \'pa_native\');
但是,当我在admin中查看产品属性时,“在产品页上显示”的勾选框未勾选。

是否有办法使用上述功能将其设置为勾选?或者,如果我直接使用get\\u之类的方法调用模板中的属性,那么会显示\\u term\\u列表(尽管我的大多数属性都有一个单独的term),还是会在显示时勾选此框?

1 个回复
最合适的回答,由SO网友:Saurabh Shukla 整理而成

其实这并不重要,因为WooCommerce使用它来显示:

$values = wc_get_product_terms( $product->id, $attribute[\'name\'], array( \'fields\' => \'names\' ) );
但是,如果不将显示设置为true,则必须将此代码添加到模板文件中。您可能还需要做其他事情(造型等)。如果将显示设置为true,则无需执行任何操作。WooCommerce会处理好的。

WooCommerce大致就是这样做的(/includes/class wc ajax.php):

wp_set_object_terms( $product_id, $values, $attribute_name);

// get existing attributes

$attributes = get_post_meta( $product_id, \'_product_attributes\' );

$attributes[ sanitize_title( $attribute_name ) ] = array(
        \'name\'          => wc_clean( $attribute_name ),
        \'value\'         => $values,
        \'position\'      => $attribute_position, // the order in which it is displayed
        \'is_visible\'    => $is_visible, // this is the one you wanted, set to true
        \'is_variation\'  => $is_variation, // set to true if it will be used for variations
        \'is_taxonomy\'   => $is_taxonomy // set to true
);


// this part sorts the attributes before saving based on the position value 
// this is defined by WooCommerce, but if your import runs before WooCommerce is loaded, this function won\'t be available
if ( ! function_exists( \'attributes_cmp\' ) ) {
    function attributes_cmp( $a, $b ) {
        if ( $a[\'position\'] == $b[\'position\'] ) {
            return 0;
        }

        return ( $a[\'position\'] < $b[\'position\'] ) ? -1 : 1;
    }
}

uasort( $attributes, \'attributes_cmp\' );

// update it back
update_post_meta( $post_id, \'_product_attributes\', $attributes );

结束

相关推荐

Set a taxonomy as private

我创建了分类增值税,并将public设置为false。但在前端,我可以通过…/?增值税=22。如何保留该分类法供内部使用?下面是我为此分类法创建的代码。add_action( \'init\', \'gp_register_taxonomy_vat\' ); function gp_register_taxonomy_vat() { $labels = array( \'name\' => \'VAT\', \