创建后更改WooCommerce自定义属性的顺序

时间:2018-07-10 22:54:53

标签: wordpress woocommerce

我创建了各种自定义属性。然后,我导入了带有CSV文件的多个产品。现在,所有这些新产品都有正确的属性值。

问题是产品编辑页面的后端以及前端的属性( not 属性术语!)都是按字母顺序排序的。

拥有超过30种属性的100多种产品我不想在后端的“产品详细信息”页面上手动更改每种产品的顺序(假设您有1000多种产品)。将来,我将复制具有正确属性排序的产品,然后从那里继续。但是现有产品现在“不正确”。

1)真的没有简单的方法来设置默认属性顺序(还是不是谈论属性术语)吗?

2)找到了这篇文章:https://stackoverflow.com/a/35800387/4417912,尝试了完全相同的代码,但没有改变有关属性顺序的任何内容

function so_35733629_update_products(){
$args = array(
    'posts_per_page'   => -1,
    'meta_value'       => '',
    'post_type'        => 'product',
    'post_status'      => 'any',
);
$products_array = get_posts( $args );

foreach( $products_array as $product ){
    $attributes = get_post_meta( $product->ID, '_product_attributes', true );
    if( ! empty( $atttributes ) ){
        $attributes = so_35733629_reorder_attributes( $attributes );
        update_post_meta( $product->ID, '_product_attributes', $attributes );
    }
}
}
add_action( 'admin_init', 'so_35733629_update_products' );

function so_35733629_reorder_attributes( $attributes ){

// here is the desired order
$order = array( 
    'pa_attr1',
    'pa_attr2'
);

$new_attributes = array();

// create new array based on order of $order array
foreach( $order as $key ){
    if( isset( $attributes[$key] ) ){
        // add to new attributes array
        $new_attributes[$key] = $attributes[$key];
        // remove from the attributes array
        unset( $attributes[$key] );
    }
}

// merge any leftover $attributes in at the end so we don't accidentally lose anything
$new_attributes = array_merge( $new_attributes, $attributes );

// set the new position keys
$i = 0;
foreach( $new_attributes as $key => $attribute ){
    // update the position
    $new_attributes[$key]['position'] = $i;
    $i++;
}

return $new_attributes;
}

谢谢!

0 个答案:

没有答案