WordPress Polylang REST API Dil Filtreleme Sorunu ve Çözümü

WordPress Polylang REST API Dil Filtreleme Sorunu ve Çözümü Giriş WordPress'te çok dilli website geliştirirken en popüler eklentilerden biri Polylang'dir. Ancak Polylang'in ücretsiz versiyonunu kullanırken REST API ile çalışırken karşılaştığımız en büyük sorunlardan biri, API'nin tüm dillerdeki yazıları döndürmesidir. Bu durum özellikle headless WordPress veya frontend framework'leri kullanırken büyük bir problem oluşturur. Problem Nedir? Polylang […]

Batuhan Özen

Batuhan Özen

30.06.2025

5 blog.read_time
  1. WordPress Polylang REST API Dil Filtreleme Sorunu ve Çözümü

Giriş

WordPress'te çok dilli website geliştirirken en popüler eklentilerden biri Polylang'dir. Ancak Polylang'in ücretsiz versiyonunu kullanırken REST API ile çalışırken karşılaştığımız en büyük sorunlardan biri, API'nin tüm dillerdeki yazıları döndürmesidir. Bu durum özellikle headless WordPress veya frontend framework'leri kullanırken büyük bir problem oluşturur.

Problem Nedir?

Polylang eklentisini yükledikten sonra, WordPress REST API endpoint'lerini çağırdığınızda (/wp-json/wp/v2/posts), varsayılan olarak tüm dillerdeki yazılar döner. Bu durum:

  • Gereksiz veri transferine neden olur
  • Frontend'te manuel filtreleme gerektirir
  • Performans sorunları yaratır
  • UX açısından kafa karıştırıcıdır

Polylang Pro versiyonunda bu sorun çözülmüş durumda, ancak ücretsiz versiyonda bu özellik bulunmuyor.

Çözüm: Custom Plugin Geliştirme

Bu sorunu çözmek için basit ama etkili bir custom plugin geliştirebiliriz:


// REST API query'sine dil filtresi ekleme add_filter('rest_post_query', function ($args, $request) { $lang = $request->get_param('lang'); if ($lang) { $args['lang'] = $lang; } return $args; }, 10, 2);

// Diğer post type'lar için de destek add_filter('rest_page_query', function ($args, $request) { $lang = $request->get_param('lang'); if ($lang) { $args['lang'] = $lang; } return $args; }, 10, 2);

// Custom post type'lar için genel çözüm add_filter('rest_pre_get_posts', function ($query, $request) { $lang = $request->get_param('lang'); if ($lang && function_exists('pll_languages_list')) { $available_langs = pll_languages_list(); if (in_array($lang, $available_langs)) { $query->set('lang', $lang); } } return $query; }, 10, 2);

Kullanım Örnekleri

Plugin aktif olduktan sonra REST API çağrılarınızı şu şekilde yapabilirsiniz:

JavaScript ile Kullanım

// Sadece Türkçe yazıları getir
fetch('/wp-json/wp/v2/posts?lang=tr')
  .then(response => response.json())
  .then(data => console.log(data));

// İngilizce sayfaları getir
fetch('/wp-json/wp/v2/pages?lang=en') .then(response => response.json()) .then(data => console.log(data));

PHP ile Kullanım

$response = wp_remote_get(
    site_url('/wp-json/wp/v2/posts?lang=tr')
);
$posts = json_decode(wp_remote_retrieve_body($response));

Ek Özellikler

Plugin'i daha da geliştirmek için şu özellikleri ekleyebilirsiniz:

Varsayılan Dil Desteği

add_filter('rest_pre_get_posts', function ($query, $request) {
    $lang = $request->get_param('lang');
// Eğer dil belirtilmemişse varsayılan dili kullan
if (!$lang && function_exists('pll_default_language')) {
    $lang = pll_default_language();
}

if ($lang) {
    $query->set('lang', $lang);
}
return $query;

}, 10, 2);

Dil Validasyonu

function validate_language_parameter($lang) {
    if (!function_exists('pll_languages_list')) {
        return false;
    }
$available_langs = pll_languages_list();
return in_array($lang, $available_langs);

}

Performans İyileştirmeleri

Bu çözüm performans açısından da önemli avantajlar sağlar:

  • Veri Transfer Azaltma: Sadece gerekli dildeki içerik transfer edilir
  • Veritabanı Optimizasyonu: Polylang'in built-in query optimizasyonları kullanılır
  • Cache Dostu: Dil bazlı cache stratejileri uygulanabilir

Sonuç

Bu basit ama etkili çözüm ile Polylang'in ücretsiz versiyonunda REST API dil filtreleme sorununu çözebilirsiniz. Plugin, minimal kod ile maksimum etki sağlar ve tüm post type'lar için çalışır.

Headless WordPress projelerinizde bu yaklaşımı kullanarak daha temiz ve performanslı API çağrıları yapabilir, frontend geliştirme sürecinizi hızlandırabilirsiniz.


Bu makale DBSoft Tech Blog için hazırlanmıştır.

Etiketler

Bu yazı için etiket bulunmuyor.