Plugin Directory

Changeset 3374219


Ignore:
Timestamp:
10/07/2025 09:29:29 AM (6 months ago)
Author:
hugeprofit
Message:

Release version 1.0.6 of HugeProfit plugin

Location:
hugeprofit
Files:
22 added
3 edited

Legend:

Unmodified
Added
Removed
  • hugeprofit/trunk/hugeprofit.php

    r3368326 r3374219  
    33Plugin Name: HugeProfit: Inventory, Profit & Finance – CRM for WooCommerce
    44Description: Manage your products, sales, and customers in WooCommerce using HugeProfit CRM. Warehouse, finance, accounting, analytics, POS — all in one window.
    5 Version: 1.0.5
     5Version: 1.0.6
    66Author: HugeProfit
    77Author URI: https://h-profit.com
     
    15981598    );
    15991599   
    1600     // Используем WordPress функции для удаления мета-полей
     1600    // ИСПРАВЛЕНО: Убрано кэширование! Используем прямой SQL для надежного удаления
     1601    // $wpdb->postmeta автоматически использует правильный префикс из wp-config.php
    16011602    foreach ($meta_keys_to_delete as $meta_key) {
    1602         $cache_key = 'hugeprofit_meta_cleanup_' . md5($meta_key);
    1603         $cached_result = wp_cache_get($cache_key, 'hugeprofit');
    1604        
    1605         if (false === $cached_result) {
    1606             // Получаем все post_id с данным meta_key
    1607             $posts_with_meta = get_posts(array(
    1608                 'post_type' => 'any',
    1609                 'meta_key' => $meta_key,
    1610                 'fields' => 'ids',
    1611                 'posts_per_page' => -1,
    1612                 'post_status' => 'any'
     1603        // Сначала считаем, сколько записей будет удалено (для диагностики)
     1604        if (function_exists('hugeprofit_log')) {
     1605            $count_products = $wpdb->get_var($wpdb->prepare(
     1606                "SELECT COUNT(*) FROM {$wpdb->postmeta} pm
     1607                 INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID
     1608                 WHERE pm.meta_key = %s AND p.post_type = 'product'",
     1609                $meta_key
    16131610            ));
    16141611           
    1615             // Удаляем мета-поля для каждого поста
    1616             foreach ($posts_with_meta as $post_id) {
    1617                 delete_post_meta($post_id, $meta_key);
    1618             }
    1619            
    1620             // Кэшируем результат на 5 минут
    1621             wp_cache_set($cache_key, count($posts_with_meta), 'hugeprofit', 5 * MINUTE_IN_SECONDS);
     1612            $count_variations = $wpdb->get_var($wpdb->prepare(
     1613                "SELECT COUNT(*) FROM {$wpdb->postmeta} pm
     1614                 INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID
     1615                 WHERE pm.meta_key = %s AND p.post_type = 'product_variation'",
     1616                $meta_key
     1617            ));
     1618           
     1619            hugeprofit_log("Найдено записей с meta_key='{$meta_key}': {$count_products} для products, {$count_variations} для variations");
     1620        }
     1621       
     1622        // Удаляем ВСЕ записи с данным meta_key (включая products и product_variation)
     1623        $deleted = $wpdb->delete(
     1624            $wpdb->postmeta,
     1625            array('meta_key' => $meta_key),
     1626            array('%s')
     1627        );
     1628       
     1629        // Логируем количество удаленных записей для диагностики
     1630        if ($deleted !== false && function_exists('hugeprofit_log')) {
     1631            hugeprofit_log("Удалено {$deleted} записей с meta_key='{$meta_key}' из таблицы {$wpdb->postmeta}");
     1632           
     1633            // Проверяем, остались ли еще записи (для диагностики)
     1634            $remaining = $wpdb->get_var($wpdb->prepare(
     1635                "SELECT COUNT(*) FROM {$wpdb->postmeta} WHERE meta_key = %s",
     1636                $meta_key
     1637            ));
     1638           
     1639            if ($remaining > 0) {
     1640                hugeprofit_log("ВНИМАНИЕ: После удаления осталось {$remaining} записей с meta_key='{$meta_key}'!");
     1641               
     1642                // Пробуем понять, почему они остались
     1643                $remaining_details = $wpdb->get_results($wpdb->prepare(
     1644                    "SELECT pm.post_id, p.post_type, p.post_status
     1645                     FROM {$wpdb->postmeta} pm
     1646                     LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID
     1647                     WHERE pm.meta_key = %s
     1648                     LIMIT 10",
     1649                    $meta_key
     1650                ), ARRAY_A);
     1651               
     1652                hugeprofit_log("Примеры оставшихся записей: " . wp_json_encode($remaining_details));
     1653            } else {
     1654                hugeprofit_log("Все записи с meta_key='{$meta_key}' успешно удалены");
     1655            }
     1656        }
     1657    }
     1658   
     1659    // 4. Дополнительная очистка: удаляем "сиротские" метаданные
     1660    // (метаданные для постов, которых уже нет в таблице posts)
     1661    if (function_exists('hugeprofit_log')) {
     1662        foreach ($meta_keys_to_delete as $meta_key) {
     1663            $orphaned_count = $wpdb->get_var($wpdb->prepare(
     1664                "SELECT COUNT(*) FROM {$wpdb->postmeta} pm
     1665                 LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID
     1666                 WHERE pm.meta_key = %s AND p.ID IS NULL",
     1667                $meta_key
     1668            ));
     1669           
     1670            if ($orphaned_count > 0) {
     1671                hugeprofit_log("Найдено {$orphaned_count} сиротских записей с meta_key='{$meta_key}'. Удаляем...");
     1672               
     1673                // Удаляем сиротские метаданные напрямую
     1674                $deleted_orphaned = $wpdb->query($wpdb->prepare(
     1675                    "DELETE pm FROM {$wpdb->postmeta} pm
     1676                     LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID
     1677                     WHERE pm.meta_key = %s AND p.ID IS NULL",
     1678                    $meta_key
     1679                ));
     1680               
     1681                hugeprofit_log("Удалено {$deleted_orphaned} сиротских записей с meta_key='{$meta_key}'");
     1682            }
    16221683        }
    16231684    }
     
    16311692    // 6. Удаляем ключи WooCommerce API, созданные плагином
    16321693    if (class_exists('WooCommerce')) {
    1633         $cache_key = 'hugeprofit_api_keys_cleanup';
    1634         $cached_result = wp_cache_get($cache_key, 'hugeprofit');
    1635        
    1636         if (false === $cached_result) {
    1637             global $wpdb;
    1638             $result = $wpdb->delete(
    1639                 $wpdb->prefix . 'woocommerce_api_keys',
    1640                 array('description' => 'HugeProfit Integration'),
    1641                 array('%s')
    1642             );
    1643            
    1644             // Кэшируем результат на 5 минут
    1645             wp_cache_set($cache_key, $result, 'hugeprofit', 5 * MINUTE_IN_SECONDS);
    1646            
    1647             // Очищаем кэш пользовательских API ключей
    1648             $current_user_id = get_current_user_id();
    1649             if ($current_user_id) {
    1650                 wp_cache_delete('hugeprofit_api_key_' . $current_user_id, 'hugeprofit');
    1651             }
     1694        // ИСПРАВЛЕНО: Убрано кэширование!
     1695        // $wpdb->prefix автоматически использует правильный префикс из wp-config.php
     1696        $result = $wpdb->delete(
     1697            $wpdb->prefix . 'woocommerce_api_keys',
     1698            array('description' => 'HugeProfit Integration'),
     1699            array('%s')
     1700        );
     1701       
     1702        // Логируем количество удаленных записей для диагностики
     1703        if ($result !== false && function_exists('hugeprofit_log')) {
     1704            hugeprofit_log("Удалено {$result} API ключей WooCommerce из таблицы {$wpdb->prefix}woocommerce_api_keys");
     1705        }
     1706       
     1707        // Очищаем кэш пользовательских API ключей
     1708        $current_user_id = get_current_user_id();
     1709        if ($current_user_id) {
     1710            wp_cache_delete('hugeprofit_api_key_' . $current_user_id, 'hugeprofit');
    16521711        }
    16531712    }
  • hugeprofit/trunk/readme.txt

    r3368326 r3374219  
    66Tested up to: 6.8 
    77Requires PHP: 7.4 
    8 Stable tag: 1.0.5
     8Stable tag: 1.0.6
    99License: GPLv2 or later 
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html 
  • hugeprofit/trunk/settings.php

    r3368326 r3374219  
    823823            hugeprofit_log("Обработка товара: " . wp_json_encode($product));
    824824           
     825            // ИСПРАВЛЕНО: Всегда добавляем ID в processed_ids для корректного подсчета прогресса
     826            if (isset($product['id'])) {
     827                $sync_info['processed_ids'][] = $product['id'];
     828            }
     829           
    825830            // Пропускаем товары, кроме обычных (1) и вариативных (2)
    826831            if (!isset($product['type_product']) || ($product['type_product'] != 1 && $product['type_product'] != 2)) {
     
    839844                    'integration_id' => $integration_id
    840845                ];
    841                
    842                 $sync_info['processed_ids'][] = $product['id'];
    843846            }
    844847        }
     
    20812084            $product_id = get_the_ID();
    20822085           
     2086            // ИСПРАВЛЕНО: Всегда добавляем ID в processed_ids для корректного подсчета прогресса
     2087            $sync_info['processed_ids'][] = $product_id;
     2088           
    20832089            // Получаем товар WooCommerce
    20842090            $product = wc_get_product($product_id);
    20852091            if (!$product) {
     2092                hugeprofit_log("Товар WooCommerce не найден, ID: $product_id");
    20862093                continue;
    20872094            }
     
    20952102                // Добавляем к массиву экспорта
    20962103                $products_to_export[] = $product_data;
    2097                
    2098                 // Добавляем ID в список обработанных
    2099                 $sync_info['processed_ids'][] = $product_id;
    21002104            }
    21012105        }
Note: See TracChangeset for help on using the changeset viewer.