Мне нужна простая функция, которая позволяет мне добавлять или заменять пустой код sku для варианта моего опубликованного продукта на родительский sku продукта.
Есть ли способ получить эту работу?
Обновлено: Замена пустого кода SKU для варианта в опубликованном продукте на родительский SKU (переменный продукт SKU), попробуйте эту функцию, которая будет работать только для роли администратора.
Сделайте резервную копию базы данных перед запуском
Чтобы запустить эту функцию, просмотрите страницу своего магазина:
Когда все вариации SKU будут обновлены, появится сообщение о том, что работа выполнена.
Код:
add_action('woocommerce_before_main_content', 'update_variations_sku', 100 );
function update_variations_sku(){
global $wpdb;
$results = $results2 = array();
$limit = 2500; // Number of variations to process
// The SQL query (get the variations with empty sku and their parent product ID)
$query = $wpdb->get_results( "SELECT p.ID, p.post_parent
FROM {$wpdb->prefix}posts as p
INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type LIKE 'product_variation'
AND p.post_status LIKE 'publish'
AND pm.meta_key LIKE '_sku'
LIMIT $limit
" );
if( count($query) == 0 ){
echo "<p><pre>The job is finished, you can remove the code</pre></p>";
return; // exit
}
// Loop through variation Ids and get the parent variable product ID
foreach( $query as $value )
$results[$value->post_parent][] = $value->ID;
// Loop through variation Ids and set the parent sku in related empty variations skus
foreach($results as $parent_id => $variation_ids){
$parent_sku = get_post_meta( $parent_id, '_sku', true );
$count = 0;
foreach($variation_ids as $variation_id){
$count++;
update_post_meta( $variation_id, '_sku', $parent_sku.'-'.$count );
}
}
if( count($query) < $limit ){
echo "<p><pre>The job is finished, you can remove the code <br>$count variations SKUs have been updated</pre></p>";
} else {
echo "<p><pre>$count variations SKUs have been updated (continue reloading the page again)</pre></p>";
}
}
Код помещается в файл function.php вашей активной дочерней темы (или темы).
Проверено и работает.
Других решений пока нет …