Changeset 3374219
- Timestamp:
- 10/07/2025 09:29:29 AM (6 months ago)
- Location:
- hugeprofit
- Files:
-
- 22 added
- 3 edited
-
tags/1.0.6 (added)
-
tags/1.0.6/assets (added)
-
tags/1.0.6/assets/images (added)
-
tags/1.0.6/assets/images/hp-black-short.png (added)
-
tags/1.0.6/assets/images/hp-black.png (added)
-
tags/1.0.6/assets/images/logo_blue.png (added)
-
tags/1.0.6/css (added)
-
tags/1.0.6/css/admin.css (added)
-
tags/1.0.6/hugeprofit.php (added)
-
tags/1.0.6/js (added)
-
tags/1.0.6/js/admin-clear-data.js (added)
-
tags/1.0.6/js/admin-expenses.js (added)
-
tags/1.0.6/js/admin-settings.js (added)
-
tags/1.0.6/js/admin-sync-reset.js (added)
-
tags/1.0.6/languages (added)
-
tags/1.0.6/languages/hugeprofit-ru_RU.mo (added)
-
tags/1.0.6/languages/hugeprofit-ru_RU.po (added)
-
tags/1.0.6/languages/hugeprofit-uk.mo (added)
-
tags/1.0.6/languages/hugeprofit-uk.po (added)
-
tags/1.0.6/languages/hugeprofit.pot (added)
-
tags/1.0.6/readme.txt (added)
-
tags/1.0.6/settings.php (added)
-
trunk/hugeprofit.php (modified) (3 diffs)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/settings.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
hugeprofit/trunk/hugeprofit.php
r3368326 r3374219 3 3 Plugin Name: HugeProfit: Inventory, Profit & Finance – CRM for WooCommerce 4 4 Description: Manage your products, sales, and customers in WooCommerce using HugeProfit CRM. Warehouse, finance, accounting, analytics, POS — all in one window. 5 Version: 1.0. 55 Version: 1.0.6 6 6 Author: HugeProfit 7 7 Author URI: https://h-profit.com … … 1598 1598 ); 1599 1599 1600 // Используем WordPress функции для удаления мета-полей 1600 // ИСПРАВЛЕНО: Убрано кэширование! Используем прямой SQL для надежного удаления 1601 // $wpdb->postmeta автоматически использует правильный префикс из wp-config.php 1601 1602 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 1613 1610 )); 1614 1611 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 } 1622 1683 } 1623 1684 } … … 1631 1692 // 6. Удаляем ключи WooCommerce API, созданные плагином 1632 1693 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'); 1652 1711 } 1653 1712 } -
hugeprofit/trunk/readme.txt
r3368326 r3374219 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.4 8 Stable tag: 1.0. 58 Stable tag: 1.0.6 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html -
hugeprofit/trunk/settings.php
r3368326 r3374219 823 823 hugeprofit_log("Обработка товара: " . wp_json_encode($product)); 824 824 825 // ИСПРАВЛЕНО: Всегда добавляем ID в processed_ids для корректного подсчета прогресса 826 if (isset($product['id'])) { 827 $sync_info['processed_ids'][] = $product['id']; 828 } 829 825 830 // Пропускаем товары, кроме обычных (1) и вариативных (2) 826 831 if (!isset($product['type_product']) || ($product['type_product'] != 1 && $product['type_product'] != 2)) { … … 839 844 'integration_id' => $integration_id 840 845 ]; 841 842 $sync_info['processed_ids'][] = $product['id'];843 846 } 844 847 } … … 2081 2084 $product_id = get_the_ID(); 2082 2085 2086 // ИСПРАВЛЕНО: Всегда добавляем ID в processed_ids для корректного подсчета прогресса 2087 $sync_info['processed_ids'][] = $product_id; 2088 2083 2089 // Получаем товар WooCommerce 2084 2090 $product = wc_get_product($product_id); 2085 2091 if (!$product) { 2092 hugeprofit_log("Товар WooCommerce не найден, ID: $product_id"); 2086 2093 continue; 2087 2094 } … … 2095 2102 // Добавляем к массиву экспорта 2096 2103 $products_to_export[] = $product_data; 2097 2098 // Добавляем ID в список обработанных2099 $sync_info['processed_ids'][] = $product_id;2100 2104 } 2101 2105 }
Note: See TracChangeset
for help on using the changeset viewer.