我创建了各种自定义属性。然后,我导入了带有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;
}
谢谢!