/** * GELİŞMİŞ API ÜRÜN TESPİT SİSTEMİ * Bu dosya API'den gelen ürünleri daha kesin olarak belirler */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * API'den gelen ürünü işaretle (aktarım sırasında çağrılacak) */ function wc_api_mark_product_as_api($product_id, $api_source = 'birikimpromosyon') { update_post_meta($product_id, '_wc_api_source', $api_source); update_post_meta($product_id, '_wc_api_import_date', current_time('mysql')); update_post_meta($product_id, '_wc_api_imported', 'yes'); error_log("API Ürün İşaretlendi: ID=$product_id, Kaynak=$api_source"); } /** * Daha kesin API ürün tespiti - YÜKSEK GÜVENİLİRLİK */ function wc_api_find_api_products_precise($limit = 20) { global $wpdb; $product_ids = array(); // Öncelik 1: Meta key ile işaretlenmiş ürünler (en güvenilir) $sql = " SELECT DISTINCT p.ID FROM {$wpdb->posts} p INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND pm.meta_key = '_wc_api_source' AND pm.meta_value = 'birikimpromosyon' ORDER BY p.ID ASC LIMIT %d "; $results = $wpdb->get_col($wpdb->prepare($sql, $limit)); if (!empty($results)) { error_log("API Ürün Tespiti: " . count($results) . " kesin API ürünü bulundu (meta ile işaretli)"); return $results; } // Öncelik 2: Specific kombinasyon - pa_marka + belirli SKU pattern $sql = " SELECT DISTINCT p.ID FROM {$wpdb->posts} p INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND tt.taxonomy = 'pa_marka' AND pm.meta_key = '_sku' AND ( pm.meta_value REGEXP '^[A-Z]{2,4}[0-9]{2,6}(-[A-Z]+)?$' -- API pattern: ABC123-RED OR pm.meta_value LIKE '%-%-%' -- Çoklu tire pattern ) ORDER BY p.ID ASC LIMIT %d "; $results = $wpdb->get_col($wpdb->prepare($sql, $limit)); if (!empty($results)) { error_log("API Ürün Tespiti: " . count($results) . " olası API ürünü bulundu (pattern ile)"); return $results; } // Öncelik 3: Son 7 gün + pa_marka (daha muhafazakar) $sql = " SELECT DISTINCT p.ID FROM {$wpdb->posts} p INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND tt.taxonomy = 'pa_marka' AND p.post_date >= DATE_SUB(NOW(), INTERVAL 7 DAY) -- Sadece 7 gün ORDER BY p.ID ASC LIMIT %d "; $results = $wpdb->get_col($wpdb->prepare($sql, $limit)); if (!empty($results)) { error_log("API Ürün Tespiti: " . count($results) . " yeni API ürünü bulundu (7 gün + marka)"); return $results; } error_log("API Ürün Tespiti: Kesin API ürünü bulunamadı"); return array(); } /** * API ürün sayısını kesin olarak say */ function wc_api_count_api_products_precise() { global $wpdb; $count = 0; // Öncelik 1: Meta ile işaretli ürünler $sql = " SELECT COUNT(DISTINCT p.ID) as count FROM {$wpdb->posts} p INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND pm.meta_key = '_wc_api_source' AND pm.meta_value = 'birikimpromosyon' "; $result = $wpdb->get_var($sql); $count += $result ? $result : 0; if ($count > 0) { error_log("Kesin API ürün sayısı: $count (meta ile işaretli)"); return $count; } // Öncelik 2: Pattern ile tespit $sql = " SELECT COUNT(DISTINCT p.ID) as count FROM {$wpdb->posts} p INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND tt.taxonomy = 'pa_marka' AND pm.meta_key = '_sku' AND ( pm.meta_value REGEXP '^[A-Z]{2,4}[0-9]{2,6}(-[A-Z]+)?$' OR pm.meta_value LIKE '%-%-%' ) "; $result = $wpdb->get_var($sql); $count += $result ? $result : 0; if ($count > 0) { error_log("Olası API ürün sayısı: $count (pattern ile)"); return $count; } // Öncelik 3: Son 7 gün + marka $sql = " SELECT COUNT(DISTINCT p.ID) as count FROM {$wpdb->posts} p INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND tt.taxonomy = 'pa_marka' AND p.post_date >= DATE_SUB(NOW(), INTERVAL 7 DAY) "; $result = $wpdb->get_var($sql); $count = $result ? $result : 0; error_log("Yeni API ürün sayısı: $count (7 gün + marka)"); return $count; } /** * Ürünün API'den gelip gelmediğini kontrol et */ function wc_api_is_product_from_api($product_id) { // Meta kontrolü $api_source = get_post_meta($product_id, '_wc_api_source', true); if ($api_source === 'birikimpromosyon') { return true; } // SKU pattern kontrolü $product = wc_get_product($product_id); if (!$product) return false; $sku = $product->get_sku(); if (empty($sku)) return false; // API SKU pattern'leri if (preg_match('/^[A-Z]{2,4}[0-9]{2,6}(-[A-Z]+)?$/', $sku)) { return true; // ABC123-RED pattern } if (substr_count($sku, '-') >= 2) { return true; // Çoklu tire pattern } // Marka taxonomy kontrolü + yeni ürün $post_date = get_post_field('post_date', $product_id); $days_old = (time() - strtotime($post_date)) / (24 * 3600); if ($days_old <= 7) { // Son 7 gün içinde $terms = wp_get_post_terms($product_id, 'pa_marka'); if (!empty($terms) && !is_wp_error($terms)) { return true; } } return false; } /** * Manuel API ürün işaretleme (admin için) */ function wc_api_manual_mark_products() { global $wpdb; // Son 30 gün içinde oluşturulan + pa_marka olan ürünleri işaretle $sql = " SELECT DISTINCT p.ID FROM {$wpdb->posts} p INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE p.post_type IN ('product', 'product_variation') AND p.post_status IN ('publish', 'private', 'draft') AND tt.taxonomy = 'pa_marka' AND p.post_date >= DATE_SUB(NOW(), INTERVAL 30 DAY) "; $product_ids = $wpdb->get_col($sql); $marked_count = 0; foreach ($product_ids as $product_id) { // Zaten işaretli değilse işaretle $existing = get_post_meta($product_id, '_wc_api_source', true); if (empty($existing)) { wc_api_mark_product_as_api($product_id); $marked_count++; } } error_log("Manuel işaretleme: $marked_count ürün API olarak işaretlendi"); return $marked_count; } https://www.promosyonextra.com/wp-sitemap-posts-post-1.xmlhttps://www.promosyonextra.com/wp-sitemap-posts-page-1.xmlhttps://www.promosyonextra.com/wp-sitemap-taxonomies-category-1.xmlhttps://www.promosyonextra.com/wp-sitemap-taxonomies-post_tag-1.xmlhttps://www.promosyonextra.com/wp-sitemap-taxonomies-woodmart_slider-1.xmlhttps://www.promosyonextra.com/wp-sitemap-users-1.xml