15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
23.10.2024
1 +1

WordPress Post ID: Eksiksiz Geliştirici Referans Kılavuzu

Bir WordPress Post ID‘si, bir WordPress kurulumundaki her içerik parçasını kalıcı olarak tanımlayan — yazılar, sayfalar, özel yazı türleri, ekler, revizyonlar ve gezinme menüsü öğeleri dahil — wp_posts veritabanı tablosunda depolanan benzersiz, otomatik artan bir tam sayıdır. WordPress’in veritabanı, eklenti ekosistemi ve şablon hiyerarşisi genelinde içeriğe dahili olarak başvurmak için kullandığı birincil anahtardır.

Slug’lar veya başlıkların aksine, bir Post ID atandıktan sonra hiçbir zaman değişmez; bu da onu programatik içerik manipülasyonu, özel sorgular ve üçüncü taraf entegrasyonları için en güvenilir referans noktası yapar.

Post ID’lerin Temel İçerik Yönetiminin Ötesinde Neden Önemli Olduğu

Belgelerin çoğu Post ID’leri bir arama kolaylığı olarak ele alır. Pratikte bunlar, WordPress’in tüm ilişkisel veri modelinin omurgasıdır. Her yorum, postmeta girişi, terim ilişkisi ve ek, veritabanı şemasındaki yabancı anahtar referansları aracılığıyla bir Post ID’ye bağlıdır. Bunu anlamak, performans, veri bütünlüğü ve eklenti mimarisi açısından doğrudan sonuçlar doğurur.

Geliştiricilerin sıklıkla gözden kaçırdığı kritik mimari gerçekler:

  • Post ID’leri, yazı türü başına değil, kurulum başına global olarak benzersizdir. ID’si 42 olan bir sayfa ve özel yazı türü girişi aynı tam sayıyı paylaşamaz.
  • ID’ler MySQL/MariaDB’deki bir otomatik artış dizisinden atanır. Silinen yazılar kalıcı boşluklar bırakır — 45. yazı çöpe atılıp temizlendiyse ID 45 hiçbir zaman var olmayabilir.
  • WordPress revizyonları Post ID’lerini tüketir. 20 kez düzenlenen bir yazı, wp_posts tablosunda her biri kendi ID’sine sahip 20 revizyon satırı oluşturur. Yoğun trafikli editoryal sitelerde bu, otomatik artış sayacını önemli ölçüde şişirir.
  • Ekler (medya kütüphanesi öğeleri), post_type = 'attachment' ile yazı olarak depolanır. Post ID’leri, _wp_attachment_metadata depolamak için wp_postmeta tablosunda kullanılır ve medya sorgularını ID’ye bağımlı kılar.
  • WordPress Multisite‘da, her site kendi önekli tablo setini aldığından (örn. wp_2_posts) Post ID’leri alt site başına sıfırlanır. Bir ağ genelinde ID benzersizliğini asla varsaymayın.

Post ID Nasıl Bulunur: Her Yöntem Açıklandı

Yöntem 1: Admin URL İnceleme Tekniği

Bu, hiçbir eklenti veya veritabanı erişimi gerektirmeyen en hızlı yöntemdir.

  1. Yazılar > Tüm Yazılar‘a gidin (veya Sayfalar > Tüm Sayfalar ya da herhangi bir özel yazı türü listesi).
  2. İmlecinizi yazı başlığının üzerine getirin — tıklamayın.
  3. Tarayıcınızın durum çubuğunda görüntülenen URL’yi inceleyin. Şu kalıbı izler:
https://yoursite.com/wp-admin/post.php?post=123&action=edit

post=‘dan sonraki tam sayı Post ID’dir. Düzenle‘ye tıklayıp tarayıcının adres çubuğunu incelemek de aynı sonucu verir.

Uç durum: Permalink yapınız özel bir taban kullanıyorsa ve yazı taslak durumundaysa, durum çubuğundaki URL yayınlanan URL’den farklı olabilir. Ön uç slug’ı değil, admin URL’sindeki post= parametresini her zaman kullanın.

Yöntem 2: Hızlı Düzenleme Sütunu Hilesi (Eklenti Gerektirmez)

  1. Yazılar > Tüm Yazılar‘a gidin.
  2. Herhangi bir yazı başlığının altındaki Hızlı Düzenle‘ye tıklayın.
  3. Post ID, Hızlı Düzenleme’nin kendisinde görünmez, ancak çevreleyen HTML, tablo satırında bir data-id özelliği içerir. Satıra sağ tıklayın ve öğeyi inceleyin — 123‘nin Post ID olduğu <tr id="post-123">‘yi göreceksiniz.

Bu, hiçbir şey yüklemeden ID’ye ihtiyaç duyduğunuzda ve durum çubuğu URL’si gizlendiğinde kullanışlıdır.

Yöntem 3: Şablonlarda get_the_ID() Fonksiyonunu Kullanma

WordPress Döngüsü içinde, mevcut yazının ID’sini programatik olarak alın:

<?php
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        $current_post_id = get_the_ID();
        echo 'Post ID: ' . esc_html( $current_post_id );
    endwhile;
endif;
?>

Döngü dışında, bir yazı nesnesini açıkça geçirin:

<?php
$post_object = get_post( get_queried_object_id() );
$post_id     = $post_object->ID;
?>

Yöntem 4: phpMyAdmin veya CLI Aracılığıyla Doğrudan Veritabanı Sorgusu

Toplu aramalar veya sunucu düzeyinde otomasyon için, wp_posts tablosunu doğrudan sorgulayın. Root erişimine sahip bir VPS Hosting ortamında MySQL CLI’yi kullanabilirsiniz:

mysql -u wordpress_user -p wordpress_db -e 
  "SELECT ID, post_title, post_type, post_status 
   FROM wp_posts 
   WHERE post_status = 'publish' 
   ORDER BY ID ASC;"

Slug’ına göre belirli bir yazının ID’sini bulmak için:

mysql -u wordpress_user -p wordpress_db -e 
  "SELECT ID, post_title FROM wp_posts 
   WHERE post_name = 'your-post-slug' 
   AND post_type = 'post';"

Tuzak: wp_posts tablosu, yayınlanan içeriğin yanı sıra revizyonları, otomatik taslakları ve gezinme menüsü öğelerini de depolar. Aynı tabloyu paylaşan dahili WordPress kayıtlarını döndürmekten kaçınmak için her zaman post_status ve post_type‘e göre filtreleyin.

Yöntem 5: Betiklenmiş Aramalar için WP-CLI

WP-CLI’nin kurulu olduğu herhangi bir sunucuda — düzgün yapılandırılmış cPanel’li VPS veya bare-metal ortamlarında standart uygulama — şunu kullanın:

wp post list --post_type=post --fields=ID,post_title,post_status --format=table

Başlığa göre tek bir yazının ID’sini almak için:

wp post list --post_type=any --search="Exact Post Title" --fields=ID,post_title

WP-CLI, toplu işlemler için phpMyAdmin’den çok daha hızlıdır ve otomasyon ardışık düzenleri için betiklenebilir.

Yöntem 6: Teknik Olmayan Kullanıcılar için Admin Eklentileri

Show IDs by 99robots eklentisi, WordPress yönetim panelindeki tüm liste tablolarına (Yazılar, Sayfalar, Medya, Kullanıcılar, Taksonomiler) bir “ID” sütunu ekler. Herhangi bir yapılandırma gerektirmez ve ihmal edilebilir düzeyde ek yük getirir. Editörlerin veritabanı erişimi olmadan Post ID’lerine ihtiyaç duyduğu ekipler için bu uygun çözümdür.

Pratik Kullanım Senaryoları: Gerçek WordPress Geliştirmede Post ID’leri

Sorgulardan Yazıları Hariç Tutma

En yaygın kullanım senaryolarından biri, post__not_in kullanarak belirli yazıları arşiv veya döngü sorgularından hariç tutmaktır:

<?php
$args = array(
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'posts_per_page' => 10,
    'post__not_in'   => array( 123, 456, 789 ), // Exclude by Post ID
);

$custom_query = new WP_Query( $args );

if ( $custom_query->have_posts() ) :
    while ( $custom_query->have_posts() ) : $custom_query->the_post();
        the_title( '<h2>', '</h2>' );
    endwhile;
    wp_reset_postdata();
endif;
?>

Performans notu: post__not_in, bir NOT IN (...) SQL cümlesine dönüşür. Yüz binlerce satır içeren tablolarda, ID sütunu düzgün şekilde indekslenmemişse bu tam tablo taramalarına neden olabilir. Standart bir WordPress kurulumunda ID birincil anahtardır ve her zaman indekslenir — ancak bunu taşınmış veya eski veritabanlarında doğrulayın.

ID’ye Göre Belirli Bir Yazıyı Alma

<?php
$post_data = get_post( 123 );

if ( ! is_null( $post_data ) ) {
    echo esc_html( $post_data->post_title );
    echo wp_kses_post( $post_data->post_content );
}
?>

get_post(), bir WP_Post nesnesi veya ID mevcut değilse null döndürür. Üretimde ölümcül hatalardan kaçınmak için özelliklere erişmeden önce her zaman null kontrolü yapın.

ID’ye Göre Yazı Meta Verisi Alma

<?php
$meta_value = get_post_meta( 123, '_custom_field_key', true );
echo esc_html( $meta_value );
?>

Üçüncü parametre true, tek bir değeri dize olarak döndürür. false geçirmek, o anahtar için tüm değerlerin bir dizisini döndürür — serileştirilmiş veya tekrarlanan meta girişleriyle çalışırken kritik bir ayrımdır.

Post ID’den Kalıcı Bağlantı Oluşturma

<?php
$url = get_permalink( 123 );
echo esc_url( $url );
?>

Bu, permalink yapınıza saygı gösterir ve Post ID’lerinden ön uç URL’leri oluşturmak için doğru yöntemdir. Site URL’sini bir slug ile asla manuel olarak birleştirmeyin — permalink yapıları değişir ve bu yaklaşım kırılgandır.

Kısa Kodlarda Post ID’lerini Kullanma

Birçok sayfa oluşturucu kısa kodu ve eklenti kısa kodu, içerik gömmek veya referans vermek için bir Post ID parametresi kabul eder:

[display_post id="123"]

Error: Contact form not found.

Contact Form 7 örneği özellikle ilgilidir — id özelliği, rastgele sıralı bir sayı değil, formun özel yazı türü girişinin Post ID’sidir. Bunu şablonlara sabit kodlamak, tam ID’yi bilmeyi gerektirir; bu nedenle veritabanı arama-değiştirme kullanan hazırlık-üretim geçişleri, ID’ler değişirse kısa kod referanslarını bozabilir.

Post ID’ye Dayalı Koşullu Mantık

<?php
if ( is_single( 123 ) ) {
    // Load special sidebar only on this post
    get_sidebar( 'special' );
} elseif ( is_page( array( 45, 67 ) ) ) {
    // Apply custom template logic to these pages
    get_template_part( 'template-parts/custom-layout' );
}
?>

is_single(), is_page() ve is_singular()‘nin tümü argüman olarak Post ID’lerini, slug’ları veya başlıkları kabul eder. ID kullanmak en güvenilir yaklaşımdır — slug’lar editörler tarafından değiştirilebilir, başlıklar benzersiz değildir.

Gelişmiş Senaryolarda Post ID Davranışı

Multisite Ağları

Bir WordPress Multisite kurulumunda, her alt site kendi wp_{blog_id}_posts tablosunu korur. Site 1’deki (wp_posts) Post ID 123, site 2’deki (wp_2_posts) Post ID 123‘den tamamen bağımsızdır. Siteler arası sorgular, blog bağlamının değiştirilmesini gerektirir:

<?php
switch_to_blog( 2 );
$post_data = get_post( 123 ); // Retrieves post 123 from site 2
restore_current_blog();
?>

switch_to_blog()‘dan sonra blog bağlamını geri yüklememek, multisite eklentilerinde ince, hata ayıklaması zor hataların yaygın bir kaynağıdır.

Post ID Boşlukları ve Otomatik Artış Davranışı

Yazılar kalıcı olarak silindiğinde (yalnızca çöpe atılmadığında), ID’leri kullanımdan kaldırılır. MySQL’in AUTO_INCREMENT sayacı bu değerleri sıfırlamaz veya yeniden kullanmaz. Yoğun editoryal iş akışlarına sahip sitelerde — sık taslak oluşturma ve silme — Post ID sayacı beklenmedik yüksek değerlere ulaşabilir. Bu normal bir davranıştır ve işlevsel bir etkisi yoktur, ancak sıralı ID’ler bekleyen geliştiricileri şaşırtabilir.

Veritabanınızdaki mevcut otomatik artış değerini kontrol etmek için:

mysql -u wordpress_user -p wordpress_db -e 
  "SELECT AUTO_INCREMENT FROM information_schema.TABLES 
   WHERE TABLE_SCHEMA = 'wordpress_db' 
   AND TABLE_NAME = 'wp_posts';"

REST API ve Post ID’leri

WordPress REST API, her yanıt nesnesinde Post ID’lerini açığa çıkarır. /wp-json/wp/v2/posts/123‘e yapılan bir GET isteği, ID’si 123 olan yazıyı alır. Bu, ön ucun arka uçla yalnızca REST veya GraphQL aracılığıyla iletişim kurduğu başsız WordPress mimarileri için Post ID’lerini kanonik referans haline getirir.

curl -s https://yoursite.com/wp-json/wp/v2/posts/123 | python3 -m json.tool

Yanıt, id alanını, link‘i, slug‘i ve tüm yazı verilerini içerir — REST API’nin tasarımında ID’nin öncelikli olduğunu doğrular.

Post ID ile Diğer WordPress Tanımlayıcıları Karşılaştırması

Post ID’nin ne zaman alternatif tanımlayıcılar yerine kullanılacağını anlamak, mimari hataları önler.

TanımlayıcıBenzersizlikDeğiştirilebilirKullanım Senaryosu
Post IDSite başına global olarak benzersizHiçbir zamanProgramatik referanslar, veritabanı sorguları, API çağrıları
Post Slug (post_name)Yazı türü başına benzersizEvet (editörler değiştirebilir)SEO dostu URL’ler, insan tarafından okunabilir referanslar
Yazı BaşlığıBenzersiz değilEvetYalnızca görüntüleme, mantık için asla
GUIDGlobal olarak benzersizOluşturulurken ayarlanır, nadiren değişirRSS beslemeleri, dahili WordPress takibi
Özel Alan DeğeriUygulamaya bağlıdırEvetUygulamaya özgü aramalar

Bu tablodan çıkarılacak temel ders: Tüm kodlarda Post ID’lerini kullanın. Slug’ları yalnızca insanların okuduğu veya yazdığı içeriklerde kullanın. Başlıkları mantıkta tanımlayıcı olarak asla kullanmayın.

Post ID Sorguları için Performans Değerlendirmeleri

ID, wp_posts tablosunun birincil anahtarı olduğundan, Dedicated Sunucular veya optimize edilmiş VPS altyapısı üzerinde çalışan yüksek trafikli WordPress kurulumlarında Post ID sorgu performansı nadiren bir darboğazdır. Ancak birkaç kalıp performansı düşürebilir:

Büyük dizilerle post__not_in: post__not_in‘e yüzlerce ID geçirmek büyük bir NOT IN (...) cümlesi oluşturur. Sonuç kümesini önbelleğe almayı veya sorguyu taksonomi dışlamaları kullanarak yeniden yapılandırmayı düşünün.

Önbelleğe alma olmadan döngüler içinde get_post(): Nesne önbelleğinden yararlanmadan bir döngüde tekrar tekrar get_post() çağırmak gereksiz veritabanı isabetleri oluşturur. WordPress’in dahili nesne önbelleği (wp_cache_get), kalıcı nesne önbelleği (Redis, Memcached) yapılandırıldığında bunu otomatik olarak işler — ancak kalıcı önbellek arka ucu olmadan yalnızca tek bir istek süresince.

Revizyon birikimi: Daha önce belirtildiği gibi, revizyonlar Post ID’lerini tüketir ve wp_posts tablosunu şişirir. wp-config.php dosyasında revizyonları sınırlayın:

define( 'WP_POST_REVISIONS', 5 ); // Keep only the last 5 revisions

Veya sürüm geçmişi gerektirmeyen yazı türleri için tamamen devre dışı bırakın:

define( 'WP_POST_REVISIONS', false );

Ek sorguları: Post ID’ye göre medya kütüphanesi sorguları, galeri eklentilerinde yaygındır. Sık post_parent tabanlı sorgular çalıştırıyorsanız post_parent sütununun indekslendiğinden emin olun; zira WordPress’in şemasında varsayılan olarak indekslenmez.

Özel Kodda Post ID Referanslarını Güvence Altına Alma

Post ID’lerini doğrulama olmadan ön uç URL’lerinde veya form alanlarında açığa çıkarmak, potansiyel bir bilgi ifşası veya yetkisiz erişim vektörü oluşturur. Her zaman doğrulayın ve temizleyin:

<?php
// Sanitize a Post ID received from user input
$post_id = isset( $_GET['post_id'] ) ? absint( $_GET['post_id'] ) : 0;

if ( $post_id > 0 && get_post_status( $post_id ) === 'publish' ) {
    // Safe to use
    $post_data = get_post( $post_id );
} else {
    wp_die( 'Invalid post reference.', 403 );
}
?>

absint(), girişi negatif olmayan bir tam sayıya dönüştürerek SQL enjeksiyon riskini ortadan kaldırır. get_post_status(), işlemeden önce yazının var olduğunu ve kamuya açık olduğunu doğrular.

Kısıtlı yazı türleriyle hassas içerik işleyen siteler için, yetenek tabanlı erişim kontrolünü uygulamak amacıyla bunu current_user_can() kontrolleriyle birleştirin.

Dağıtım Değerlendirmeleri: Ortamlar Arası Post ID’leri

WordPress geliştirmede en yaygın üretim sorunlarından biri, ortamlar arasındaki Post ID kaymasını içerir. Yerel olarak geliştirip yazılar oluşturduğunuzda ve ardından hazırlık veya üretime geçiş yaptığınızda, yerel veritabanınızdaki Post ID’leri üretim veritabanındakilerle eşleşmeyecektir — özellikle üretim sitesinde zaten içerik varsa.

Pratik azaltma stratejileri:

  • Post ID’lerini, kod değişikliği olmadan ortam başına güncellenebilmelerine olanak tanıyan get_option() / update_option() kullanarak özel bir seçenekler tablosu girişinde depolayın.
  • Kodunuzda arama anahtarları olarak yazı slug’larını kullanın, ardından kazanılan esneklik için marjinal performans maliyetini kabul ederek get_page_by_path() veya özel bir sorgu kullanarak çalışma zamanında ID’lere çözümleyin.
  • Anlamsal adları (örn. 'homepage_hero_post') gerçek ID’lere eşleyen, ortam başına yapılandırılabilir wp_options tablosunda bir post ID eşleme tablosu uygulayın.

Otomatik CI/CD ardışık düzenleriyle VPS Hosting üzerinde WordPress dağıtan ekipler için bu eşleme yaklaşımı, ortama özgü yapılandırma yönetimiyle temiz bir şekilde entegre olur.

Teknik Karar Matrisi: Doğru Arama Yöntemini Seçme

SenaryoÖnerilen YöntemNeden
Tek seferlik ID araması, yönetici erişimiwp-admin’de URL incelemesiSıfır ek yük, anlık
Toplu ID araması, geliştiriciWP-CLI wp post listBetiklenebilir, hızlı, UI bağımlılığı yok
Teknik olmayan editörün ID’lere ihtiyacı varShow IDs eklentisiGüvenli, kod gerektirmez
Otomatik sunucu tarafı betiğiDoğrudan MySQL sorgusuWordPress önyükleme ek yükünü atlar
Şablon/eklenti geliştirmeget_the_ID() veya get_post()Uygun WordPress API kullanımı
REST API / başsız ön uç/wp-json/wp/v2/posts/{id}Yerel REST kaynak adresleme
Ortamlar arası taşınabilirlikÇalışma zamanında slug’dan ID’ye çözümlemeOrtamlar arasındaki ID kaymasını önler

Temel Teknik Çıkarımlar: Uygulanabilir Kontrol Listesi

  • Herhangi bir veritabanı etkileşiminden önce dışarıdan sağlanan Post ID’lerini temizlemek için her zaman absint() kullanın.
  • Dağıtım için tasarlanmış tema şablonlarında Post ID’lerini asla sabit kodlamayın — bunun yerine slug tabanlı aramalar veya seçenekler tablosu eşlemeleri kullanın.
  • Tablo büyümesini kontrol etmek için editoryal sitelerde wp-config.php dosyasında WP_POST_REVISIONS‘i sabit bir tam sayıya ayarlayın.
  • Multisite’da, bağlam sızıntısını önlemek için switch_to_blog()‘dan sonra her zaman restore_current_blog()‘i çağırın.
  • Tüm doğrudan veritabanı sorgularında post_status ve post_type‘i doğrulayın — wp_posts tablosu, kullanıcıya yönelik içerik olmayan dahili WordPress kayıtlarını içerir.
  • Oturum bağımlı ve betiklenemeyen phpMyAdmin yerine, otomatik dağıtım betiklerindeki toplu Post ID işlemleri için WP-CLI kullanın.
  • Karmaşık şablonlarda gereksiz get_post() veritabanı isabetlerini önlemek için üretim sunucularında kalıcı bir nesne önbelleği (Redis veya Memcached) yapılandırın.
  • Başsız WordPress dağıtımları için, REST API’nin id alanını kanonik Post ID referansı olarak ele alın — veritabanı birincil anahtarıyla aynıdır.

WordPress kurulumunuz veritabanı erişimini, kabuk erişimini veya WP-CLI kullanılabilirliğini kısıtlayan bir altyapıda çalışıyorsa, tam root erişimine sahip Dedicated Sunucular gibi uygun şekilde sağlanmış bir ortama geçiş bu kısıtlamaları tamamen ortadan kaldırır ve bu kılavuzda açıklanan Post ID yönetim tekniklerinin tamamını etkinleştirir. Karmaşık özel yazı türü mimarilerine sahip siteler, Post ID tabanlı kaynakları açığa çıkaran REST API uç noktalarını güvence altına almak için WordPress’i uygun kapsamlı SSL Sertifikaları ile eşleştirmekten de yararlanır.

SSS

WordPress’te bir yazı silindiğinde Post ID’ye ne olur?

ID kalıcı olarak kullanımdan kaldırılır. MySQL’in AUTO_INCREMENT sayacı silinen ID’leri yeniden kullanmaz, dolayısıyla ID dizisindeki boşluklar normaldir ve beklenir. ID hiçbir zaman yeni içeriğe yeniden atanmayacaktır.

Aynı WordPress sitesindeki iki yazı aynı Post ID’yi paylaşabilir mi?

Hayır. Post ID, wp_posts tablosunun birincil anahtarıdır ve tek bir WordPress kurulumu içindeki tüm yazı türleri, durumlar ve içerik türleri genelinde mutlak benzersizliği zorunlu kılar. Multisite’da benzersizlik, alt site tablosu başına kapsamlandırılır.

Yazılar arasında Post ID’lerim neden büyük sayılarla atlıyor?

Her revizyon, otomatik taslak ve gezinme menüsü öğesi, aynı otomatik artış dizisinden bir ID tüketir. 15 revizyonu olan bir yazı toplamda 16 ID tüketmiş olacaktır. Yoğun editoryal aktivite, sık taslak oluşturma ve sayfa oluşturucu otomatik kaydetmeleri bu sayacı önemli ölçüde hızlandırır.

Post ID’leri ön uç URL’lerinde veya AJAX isteklerinde açığa çıkarmak güvenli midir?

Post ID’lerinin kendisi hassas veri değildir — kriptografik değeri olmayan sıralı tam sayılardır. Risk, bunları sunucu tarafı doğrulaması olmadan kullanmaktır; bu, genel olmayan içeriğe yetkisiz erişime izin verebilir. Herhangi bir veri döndürmeden önce her zaman ID’nin var olduğunu doğrulayın, post_status‘i kontrol edin ve yetenek kontrollerini uygulayın.

Bir WordPress ekinin (medya dosyasının) Post ID’sini nasıl bulurum?

Medya > Kütüphane‘ye gidin, liste görünümüne geçin, ek başlığının üzerine gelin ve tarayıcı durum çubuğundaki URL’den post= parametresini okuyun — yazılar ve sayfalar için kullanılan yöntemle aynıdır. Alternatif olarak, aşağıdaki WP-CLI komutunu çalıştırın:

wp post list --post_type=attachment --fields=ID,post_title,post_mime_type --format=table
15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın