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 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 (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 ──
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));