function cev_find_empty_variations() {
global $wpdb;
// Перевірка прав доступу
if (!current_user_can('manage_woocommerce')) {
return array(
'success' => false,
'message' => 'Недостатньо прав доступу.'
);
}
// Оптимізований SQL-запит для пошуку всіх варіацій
$variations = $wpdb->get_results("
SELECT ID, post_title, post_parent
FROM {$wpdb->posts}
WHERE post_type = 'product_variation'
AND post_status = 'publish'
LIMIT 5000
");
if (empty($variations)) {
return array(
'success' => true,
'message' => 'Варіацій не знайдено.',
'variations' => array()
);
}
$problematic_variations = array();
// Перевірка кожної варіації на порожні атрибути
foreach ($variations as $variation) {
$parent_id = $variation->post_parent;
$variation_id = $variation->ID;
// Отримуємо батьківський товар
$parent_product = wc_get_product($parent_id);
if (!$parent_product || !$parent_product->is_type('variable')) {
continue;
}
// Отримуємо варіацію
$variation_product = wc_get_product($variation_id);
if (!$variation_product) {
continue;
}
// Додатковий метод пошуку порожніх варіацій через мета-дані
$meta_attributes = get_post_meta($variation_id);
$has_empty_attribute = false;
$empty_attributes = array();
// Перевіряємо метадані атрибутів варіації
foreach ($meta_attributes as $meta_key => $meta_value) {
if (strpos($meta_key, 'attribute_') === 0) {
$meta_value = $meta_value[0]; // Отримуємо значення з масиву
// Перевіряємо, чи є атрибут порожнім, "any" або "Будь який"
if (empty($meta_value) || $meta_value === 'any' || strpos($meta_value, 'Будь який') !== false) {
$has_empty_attribute = true;
$empty_attributes[] = $meta_key;
}
}
}
if (!$has_empty_attribute) {
// Перевіряємо атрибути через API варіації
$attributes = $variation_product->get_attributes();
if (empty($attributes) && !empty($parent_product->get_attributes())) {
// Варіація без атрибутів, але батьківський товар має атрибути
$has_empty_attribute = true;
} else {
// Перевіряємо кожен атрибут
foreach ($attributes as $attribute_name => $attribute_value) {
if (empty($attribute_value) || $attribute_value === 'any') {
$has_empty_attribute = true;
$empty_attributes[] = $attribute_name;
}
}
}
}
if ($has_empty_attribute) {
$problematic_variations[] = array(
'id' => $variation_id,
'title' => $variation->post_title,
'parent_id' => $parent_id,
'parent_title' => $parent_product->get_name(),
'issue' => 'Порожні атрибути ("Будь-який розмір")',
'empty_attributes' => $empty_attributes
);
}
}
return array(
'success' => true,
'message' => 'Знайдено ' . count($problematic_variations) . ' варіацій з порожніми атрибутами.',
'variations' => $problematic_variations,
'total' => count($variations)
);
}