WooCommerce siteniz ile Trendyol mağazanız arasındaki bağı koparmayacak, sunucunuzu yormayan ve tamamen akıllı algoritmalarla çalışan yeni nesil Trendyol senkronizasyon eklentisini (v10.2) paylaşıyorum.
Artık manuel ürün girmekle uğraşmanıza gerek yok; eklentiyi kurun, API bilgilerinizi girin ve arkanıza yaslanın!
✨ Öne Çıkan Özellikler
- 📦 Akıllı Manuel İçeri Aktarma: Tek tıkla Trendyol mağazanızdaki ilk 50 ürünü kontrol eder, sitenizde olmayanları otomatik olarak "Taslak" olarak içeri aktarır.
- ⏰ 2 Saatte Bir Otomatik Kontrol: WordPress Cron altyapısını kullanarak her 2 saatte bir Trendyol'daki son 5 ürünü kontrol eder. Yeni ürün varsa otomatik çeker.
- 🖼️ Gelişmiş Galeri Motoru: Sadece ana resmi değil, tüm ürün görsellerini Trendyol'dan çeker ve WordPress ortam kütüphanesine kaydeder.
- 🔄 Çift Yönlü Stok & Fiyat Senkronu: WooCommerce üzerinde bir ürünün fiyatını veya stoğunu güncellediğiniz anda, eklenti bu bilgiyi anında Trendyol mağazanıza iletir.
- 📁 Otomatik Kategori Yönetimi: Trendyol'daki kategori isimlerini okur, sitenizde varsa eşleştirir, yoksa otomatik olarak oluşturur.
- 🛡️ Sunucu Dostu (Anti-Ban): Görsel çekimlerinde ve ürün aktarımlarında sleep ve usleep fonksiyonları kullanarak sunucunuzun ve API'nin darboğaza girmesini engeller.
🛠 Teknik Detaylar
- Sürüm: 10.2 (Smart Auto)
- Altyapı: WooCommerce + Trendyol REST API
- Güvenlik: API anahtarları wp_options tablosunda güvenle saklanır, dış erişime kapalıdır.
- Kontrol Paneli: Sade ve anlaşılır yönetim arayüzü.
💡 Kurulum ve Kullanım
- Eklenti dosyasını wp-content/plugins/ dizinine atın veya panelden yükleyin.
- Trendyol Partner panelinden aldığınız Satıcı ID, API Key ve API Secret bilgilerini "Trendyol Sync" menüsüne girin.
- Ayarları kaydedin.
- İsterseniz "50 Ürünü Getir" butonuyla ilk toplu aktarımı başlatın, isterseniz sistemin 2 saatlik periyotlarla otomatik çalışmasını bekleyin.
<?php
/**
* Plugin Name: My Trendyol Sync (v10.2 - Smart Auto)
* Description: 50'li paket çekme, 2 saatte bir otomatik yeni ürün kontrolü ve tam galeri desteği.
* Version: 10.2
* Author: Caner G
*/
if ( ! defined( 'ABSPATH' ) ) exit;
// --- 1. GÜVENLİ RESİM MOTORU ---
function tr_v102_safe_gallery($images, $post_id) {
if (empty($images) || !is_array($images)) return;
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
$gallery_ids = array();
foreach ($images as $index => $img_data) {
sleep(1); // Sunucu nefes alma payı
$tmp = download_url($img_data['url']);
if (is_wp_error($tmp)) continue;
$file_array = array('name' => sanitize_file_name(basename($img_data['url'])) . '.jpg', 'tmp_name' => $tmp);
$attachment_id = media_handle_sideload($file_array, $post_id);
if (!is_wp_error($attachment_id)) {
if ($index === 0) set_post_thumbnail($post_id, $attachment_id);
else $gallery_ids[] = $attachment_id;
}
@unlink($tmp);
}
if (!empty($gallery_ids)) update_post_meta($post_id, '_product_image_gallery', implode(',', $gallery_ids));
}
// --- 2. ÜRÜN ÇEKME ÇEKİRDEĞİ (50 ÜRÜN LİMİTLİ) ---
function tr_v102_core_import($limit = 50) {
@set_time_limit(600);
$sid = get_option('tr_seller_id'); $akey = get_option('tr_api_key'); $asec = get_option('tr_api_secret');
if(!$sid || !$akey || !$asec) return 0;
$auth = base64_encode( $akey . ":" . $asec );
$url = "https://apigw.trendyol.com/integration/product/sellers/$sid/products?size=" . $limit;
$response = wp_remote_get($url, array('headers' => array('Authorization' => 'Basic ' . $auth), 'timeout' => 60));
if (is_wp_error($response)) return 0;
$data = json_decode(wp_remote_retrieve_body($response), true);
if (!isset($data['content'])) return 0;
$count = 0;
foreach ($data['content'] as $tr_item) {
$exists = wc_get_product_id_by_sku($tr_item['barcode']);
if (!$exists) {
$pid = wp_insert_post(array(
'post_title' => $tr_item['title'],
'post_content' => $tr_item['description'] ?? '',
'post_status' => 'draft',
'post_type' => 'product'
));
$wc_prod = wc_get_product($pid);
$wc_prod->set_sku($tr_item['barcode']);
$wc_prod->set_regular_price($tr_item['salePrice']);
$wc_prod->set_manage_stock(true);
$wc_prod->set_stock_quantity($tr_item['quantity']);
// Otomatik Kategori
if (!empty($tr_item['categoryName'])) {
$term = get_term_by('name', $tr_item['categoryName'], 'product_cat');
$cat_id = $term ? $term->term_id : wp_insert_term($tr_item['categoryName'], 'product_cat')['term_id'];
if ($cat_id) $wc_prod->set_category_ids(array($cat_id));
}
$wc_prod->save();
if (!empty($tr_item['images'])) tr_v102_safe_gallery($tr_item['images'], $pid);
$count++;
usleep(500000);
}
}
return $count;
}
// --- 3. 2 SAATTE BİR OTOMATİK KONTROL ---
// WordPress standart olarak 2 saatlik periyot sunmaz, kendimiz tanımlıyoruz:
add_filter( 'cron_schedules', 'tr_v102_add_two_hours' );
function tr_v102_add_two_hours( $schedules ) {
$schedules['two_hours'] = array('interval' => 7200, 'display' => 'Her 2 Saatte Bir');
return $schedules;
}
if ( ! wp_next_scheduled( 'tr_v102_auto_check' ) ) wp_schedule_event( time(), 'two_hours', 'tr_v102_auto_check' );
add_action( 'tr_v102_auto_check', 'tr_v102_auto_task' );
function tr_v102_auto_task() {
// Otomatik görevde sadece en yeni 5 ürünü kontrol et (Sunucuyu yormaz)
tr_v102_core_import(5);
}
// --- 4. STOK & FİYAT SENKRONU ---
add_action( 'woocommerce_update_product', 'tr_v102_sync_out', 10, 1 );
function tr_v102_sync_out($product_id) {
$product = wc_get_product($product_id);
if(!$product || !$product->get_sku()) return;
$sid = get_option('tr_seller_id'); $auth = base64_encode(get_option('tr_api_key').":".get_option('tr_api_secret'));
$payload = array("items" => array(array("barcode"=>$product->get_sku(), "quantity"=>(int)$product->get_stock_quantity(), "salePrice"=>(float)$product->get_price(), "listPrice"=>(float)$product->get_price())));
wp_remote_post("https://api.trendyol.com/sapigw/suppliers/$sid/products/price-and-inventory", array('headers'=>array('Authorization'=>'Basic '.$auth,'Content-Type'=>'application/json'),'body'=>json_encode($payload)));
}
// --- 5. PANEL ---
add_action('admin_menu', 'tr_v102_menu');
function tr_v102_menu(){
add_menu_page('Trendyol Smart', 'Trendyol Sync', 'manage_options', 'tr-sync', 'tr_v102_page', 'dashicons-update-alt', 56);
}
function tr_v102_page(){
if(isset($_POST['tr_save'])){
update_option('tr_seller_id', $_POST['tr_seller_id']);
update_option('tr_api_key', $_POST['tr_api_key']);
update_option('tr_api_secret', $_POST['tr_api_secret']);
echo '<div class="updated"><p>Ayarlar Kaydedildi.</p></div>';
}
if(isset($_POST['tr_import_now'])){
$count = tr_v102_core_import(50);
echo '<div class="notice notice-success"><p>✅ Manuel Tarama Bitti: '.$count.' yeni ürün Taslak olarak eklendi.</p></div>';
}
echo '<div class="wrap"><h1>🚀 Trendyol Smart Sync v10.2</h1>';
echo '<div style="background:#e3f2fd; padding:15px; border-left:5px solid #2196f3; margin-bottom:20px;">
<b>Otomasyon Durumu:</b> Sistem her 2 saatte bir Trendyol\'daki son 5 ürünü otomatik kontrol eder ve sitende yoksa ekler.
</div>';
echo '<form method="post">
<div style="background:#fff; padding:20px; border:1px solid #ccc; margin-bottom:20px;">
<h3>📦 Manuel Toplu Çekme (İlk 50)</h3>
<input type="submit" name="tr_import_now" class="button button-primary" value="50 Ürünü Kontrol Et ve Getir">
</div>
<div style="background:#fff; padding:20px; border:1px solid #ccc;">
<table class="form-table">
<tr><th>Satıcı ID:</th><td><input type="text" name="tr_seller_id" value="'.get_option('tr_seller_id').'" class="regular-text"></td></tr>
<tr><th>API Key:</th><td><input type="text" name="tr_api_key" value="'.get_option('tr_api_key').'" class="regular-text"></td></tr>
<tr><th>API Secret:</th><td><input type="password" name="tr_api_secret" value="'.get_option('tr_api_secret').'" class="regular-text"></td></tr>
</table>
<input type="submit" name="tr_save" class="button button-secondary" value="Ayarları Kaydet">
</div>
</form></div>';
}Bu sayede trendyol üzerinden girdiğiniz ürünleri tek tek sitenize gerek kalmayacaktır, fiyat veya stok güncellemenizde iki taraflı otomatik güncelleme yapmaktadır.Herkese hayırlı forumlar, iyi bayramlar dilerim.