@superMedved

Как массово добавить атрибуты в мета WooCommerce?

Стоит задача сделать сортировку, что товары определенного бренда были выше других. Все на WooCommerce
Создал кастомную сортировку
// При сохранении продукта дублируем атрибут в мета данные 
add_action( 'save_post', 'woocommerce_attribute_to_meta' );
function woocommerce_attribute_to_meta( $post_id ) {
        if (!empty($_REQUEST['attribute_names'])){
            foreach( $_REQUEST['attribute_names'] as $index => $value ) {
                update_post_meta( $post_id, $value, $_REQUEST['attribute_values'][$index] );
            }
        }
}
function woocommerce_get_catalog_ordering_attribute_args( $args ) {
    global $wp_query;
        // Меняем $_SESSION на $_GET
    if (isset($_GET['orderby'])) {
        switch ($_GET['orderby']) :
            case 'pa_slojnost_asc' :
                $args['order'] = 'ASC';
                $args['meta_key'] = 'pa_brend';
                $args['orderby'] = 'meta_value';                
            break;
        endswitch;
    }
    return $args;
}


add_filter('woocommerce_get_catalog_ordering_args', 'woocommerce_get_catalog_ordering_attribute_args');
 
function woocommerce_catalog_orderby_attribute( $sortby ) {
    $sortby['pa_slojnost_asc'] = 'Исходная сортировка';
    return $sortby;
}
add_filter('woocommerce_catalog_orderby', 'woocommerce_catalog_orderby_attribute');
add_filter( 'woocommerce_default_catalog_orderby_options', 'woocommerce_catalog_orderby_attribute' );

Оно работает. Остается только добавить атрибут в метаполя для существующих товаров(около 500). Если сохранять или обновлять товары вручную то все работает. Но пройти 500 товаров просто не реально - поэтому прошу помощи.
Пытался использовать код:
add_action('woocommerce_loaded','new_attribute_to_meta');
function new_attribute_to_meta(){
  global $wpdb;
  
  $num=500; //Кол-во обрабатываемых записей
  foreach(wc_get_products(array('numberposts' => $num)) as $pr){
    foreach($pr->get_attributes() as $key=>$attr){
      $val=wc_get_product_terms( $pr->get_id(), $attr->get_name(), array( 'fields' => 'all' ) );
      if($key=='pa_brend'){
        update_post_meta($pr->get_id(),'_'.$key,$val[0]->name);
    
      }
    }
  }
}

Но ничего не работает. Помогите, пожалуйста!!!
  • Вопрос задан
  • 610 просмотров
Пригласить эксперта
Ответы на вопрос 1
Zheleznov
@Zheleznov
Возможно подойдёт этот плагин
Woocommerce Advanced Bulk Edit

я им пользовался, когда надо было сменить у огромного кол-ва товаров теги, категории, атрибуты и пр.
Отлично работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы