ana_sayfa / wordpress-plugin / rest-api-ve-ajax
🔵 WordPress Plugin 📊 İleri ⏱ 40 dk 📋 1 Kod Örneği

REST API ve AJAX

WordPress'in REST API'si, WordPress verilerine HTTP istekleriyle erişmenizi sağlar. Mobil uygulama, JavaScript framework veya başka sistemlerle entegrasyon için kullanılır.

wp_ajax vs REST API

wp_ajax eski ve WordPress'e bağımlı AJAX yöntemidir. REST API daha modern, standart ve esnek bir yaklaşımdır. Yeni projeler için REST API tercih edilmelidir.

Nonce ile Güvenlik

Nonce (Number Used Once) CSRF saldırılarına karşı koruma sağlar. REST API endpoint'lerinizi her zaman yetki ve nonce kontrolüyle koruyun.

PHP Custom REST API Endpoint
<?php
// ── Custom REST API Endpoint ──
add_action('rest_api_init', 'furkanbacanli_api_kaydet');

function furkanbacanli_api_kaydet() {

    // GET: Kursları listele
    register_rest_route('furkanbacanli/v1', '/kurslar', [
        'methods'             => 'GET',
        'callback'            => 'furkanbacanli_api_kurslar',
        'permission_callback' => '__return_true', // Public
        'args' => [
            'adet' => [
                'default'           => 10,
                'sanitize_callback' => 'absint',
                'validate_callback' => fn($v) => $v > 0 && $v <= 100,
            ],
        ],
    ]);

    // POST: Yeni kurs ekle (Sadece giriş yapmış kullanıcılar)
    register_rest_route('furkanbacanli/v1', '/kurslar', [
        'methods'             => 'POST',
        'callback'            => 'furkanbacanli_api_kurs_ekle',
        'permission_callback' => function() {
            return current_user_can('publish_posts');
        },
    ]);

    // GET: Tek kurs
    register_rest_route('furkanbacanli/v1', '/kurslar/(?P<id>\d+)', [
        'methods'             => 'GET',
        'callback'            => 'furkanbacanli_api_tek_kurs',
        'permission_callback' => '__return_true',
    ]);
}

function furkanbacanli_api_kurslar(WP_REST_Request $istek) {
    $adet = $istek->get_param('adet');
    $kurslar = furkanbacanli_kurslar_getir($adet);

    if (empty($kurslar)) {
        return new WP_REST_Response(['mesaj' => 'Kurs bulunamadı'], 404);
    }

    return new WP_REST_Response([
        'basari' => true,
        'toplam' => count($kurslar),
        'veri'   => $kurslar,
    ], 200);
}

function furkanbacanli_api_tek_kurs(WP_REST_Request $istek) {
    $id = $istek->get_param('id');
    $kurs = get_post($id);

    if (!$kurs || $kurs->post_type !== 'kurs') {
        return new WP_Error('bulunamadi', 'Kurs bulunamadı', ['status' => 404]);
    }

    return new WP_REST_Response([
        'id'     => $kurs->ID,
        'baslik' => $kurs->post_title,
        'icerik' => apply_filters('the_content', $kurs->post_content),
        'link'   => get_permalink($kurs->ID),
    ], 200);
}

function furkanbacanli_api_kurs_ekle(WP_REST_Request $istek) {
    $baslik  = sanitize_text_field($istek->get_param('baslik'));
    $icerik  = wp_kses_post($istek->get_param('icerik'));

    if (empty($baslik)) {
        return new WP_Error('gecersiz', 'Başlık zorunludur', ['status' => 400]);
    }

    $id = wp_insert_post([
        'post_title'   => $baslik,
        'post_content' => $icerik,
        'post_type'    => 'kurs',
        'post_status'  => 'publish',
        'post_author'  => get_current_user_id(),
    ]);

    if (is_wp_error($id)) {
        return new WP_REST_Response(['hata' => $id->get_error_message()], 500);
    }

    return new WP_REST_Response(['basari' => true, 'id' => $id], 201);
}

// ── JavaScript'ten API Kullanımı ──
// fetch('https://site.com/wp-json/furkanbacanli/v1/kurslar?adet=6')
//   .then(r => r.json())
//   .then(data => console.log(data.veri));
← Önceki Ders
Shortcode ve Widget Geliştirme