Woocommerce - нужна помощь с php функцией замены атрибутов

Robick
На сайте с 17.08.2007
Offline
173
404

Всем привет, на сайте работает такой скрипт

add_action('admin_init', 'admin_init_function');

function admin_init_function(){
if(is_admin() and isset($_GET['change_atts']) and $_GET['change_atts'] == 'mygeweb'):
$the_query = new WP_Query( 'post_type=product&post_status=publish&showposts=-1' );
if ( $the_query->have_posts() ):
while ( $the_query->have_posts() ): $the_query->the_post();

$_product = new WC_Product( get_the_ID() );
$attributes = $_product->get_attributes();
if(!is_wp_error($attributes)):
foreach($attributes as $key => $value):
if(strpos($key, 'tsvet') !== false):
$attr_val = get_the_terms( $_product->id, $key);
if(!is_wp_error($authorvalues)):

$prod_atts = get_post_meta($_product->id, '_product_attributes', true);
if(!array_key_exists('pa_gtsvet', $prod_atts)):
$prod_atts['pa_gtsvet'] = array(
'name' => 'pa_gtsvet',
'value' => '',
'position' => 100,
'is_visible' => 0,
'is_variation' => 0,
'is_taxonomy' => 1
);
update_post_meta($_product->id, '_product_attributes', $prod_atts);
endif;

//header("Content-Type: text/html; charset=utf-8");
$names_arr = array();
foreach($attr_val as $attr_term):
$term = get_term_by( 'name', $attr_term->name, 'pa_gtsvet' );
if($term !== false):
$names_arr[] = $attr_term->name;
else:
$new_term = wp_insert_term( $attr_term->name, 'pa_gtsvet' );
if(!is_wp_error($new_term)):
$names_arr[] = $attr_term->name;
endif;
endif;
endforeach;
wp_set_object_terms( $_product->id, $names_arr, 'pa_gtsvet', true);

break;
endif;

endif;
endforeach;
endif;

endwhile;
wp_reset_postdata();
die('END');
endif;
wp_reset_postdata();
endif;
}

Он собирает цвета всех производителей (это различные атрибуты с общим slug'ом в названии – tsvet) и записывает их текстом в общий для всех карточек товаров атрибут gtsvet (таким образом обрабатывается каждая карточка товара). Вызывается он в браузере по адресу /wp-admin/?change_atts=mygeweb

Задача сделать так, что бы товары, у которых есть атрибут lock со значением 1, скрипт игнорировал, не затрагивал при обновлении.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий