WordPress İçinde Özel Proje Oluşturmak

WordPress içinde kendi .php dosyalarımızı nasıl kullanabiliriz? Bu .php dosyalarını kullanırken wordpress url yapısından nasıl faydalana biliriz?

Öncelikle bir wordpress sayfası oluşturmamız gerekiyor. Oluşturduğumuz bu sayfaya GET parametrelerini göndereceğiz. Gelen GET parametreleri sayesinde işlem yaptırabiliriz.

1. Sayfa Oluşturma

Tüm GET parametrelerimizi aşağıdaki resimde kırmızı daire içinde oluşturulan sef link sayesinde göndereceğiz.

wordpress-icinde-ozel-proje-olusturmak-1

2. Yeniden Yazma (rewrite) Kuralı Oluşturalım

GET parametrelerini işlememizi sağlayacak kuralımızı temamızın function.php dosyası içine ekleyeceğiz. Kırmızı daire içinde yazan sef linkimiz ile aşağıdaki kuralda belirttiğimiz sef link aynı olmalıdır.

function my_insert_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules['(harika-sozler)/([a-zA-Z0-9-]+)$'] = 'index.php?pagename=$matches[1]&soz_sahibi=$matches[2]'; 
    $newrules['(harika-sozler)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$'] = 'index.php?pagename=$matches[1]&soz_sahibi=$matches[2]&soz_sayfa=$matches[3]';

    return $newrules + $rules; 
}

add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );

3. Parametreleri Ekleyelim

Hangi parametrelerin geldiğini belirtmek için aşağıdaki fonksiyonu kullanmalıyız. Ben sadece iki parametre gönderdim.

function my_insert_query_vars( $vars )
{
    array_push($vars, 'soz_sahibi');
    array_push($vars, 'soz_sayfa');

    return $vars;
}

add_filter( 'query_vars','my_insert_query_vars' );

4. Aldığımız Parametreleri İşlemek

Temamızın page.php dosyası içine bir if kontrolü ekleyerek bu paremetleri işleyebiliriz.

Örnek Bağlantı. https:/ahmeti.net/harika-sozler/soz_sahibi/soz_sayfa/

$page_name_spc=get_query_var('pagename');

if ( $page_name_spc == 'harika-sozler' ){
    require 'ahmeti_wp_soz.php';
}else{
    require 'std_page.php';
}

5. Özel .php Dosyamızda Parametreleri İşlemek

3 numaralı başlıkta iki parametre eklemiştik. Bu parametrelerin kontolünü yapalım.

$aa_soz_sayfa=get_query_var('soz_sayfa');
$aa_soz_sahibi=get_query_var('soz_sahibi');

if ( !empty($aa_soz_sahibi) && !empty($aa_soz_sayfa) ){

    // SOZ SAHIBI SAYFASI  && SAYFA

}elseif (!empty($aa_soz_sahibi)){

    // SOZ SAHIBI SAYFASI

}else{

    // INDEX

}

6. Rewrite Cache’ine Dikkat Edin

WordPress rewrite kurallarını cache’te tutmaktadır. Bunlar kalıcı bağlantılar sayfasını güncellediğinizde bu cache’te güncellenir. Yada aşağıdaki fonksiyonu temanızın function.php dosyasının en altına ekleyin.

add_action( 'wp_loaded','my_flush_rules' );

function my_flush_rules()
{
    $rules = get_option('rewrite_rules');

    if ( ! isset( $rules['(harika-sozler)/([a-zA-Z0-9-]+)$'] )  || ! isset( $rules['(harika-sozler)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$'] ) ) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

Ve sonunda bizde wordpress içinde bir proje oluşturmuş olduk. Takıldığınız bir nokta varsa yorumlarda belirtebilir siniz. Herkese iyi çalışmalar…

Bu sayfa 3.355 kez görüntülendi.

Ahmet

Sıradan bloglardan birisi :)

Bunlar da hoşunuza gidebilir...

7 Cevaplar

  1. cgr dedi ki:

    Hocam bu yöntemle sayfa yapısını

    “siteadresi.com/sayfa-baslik/”

    şeklinden

    “siteadresi.com/indir/sayfa-baslik” şekline getirdim. Bu yüzden 2 şekilde de aynı sayfaya ulaşılabiliyor. Ben sadece 2. link ile ulaşılasını istiyorum yani 1. çalışmasın. Rewrite_rule’ları listelediğim zaman

    “[indir/([a-zA-Z0-9-]+)$] => index.php?&pagename=$matches[1]”
    “[page/?([0-9]{1,})/?$] => index.php?&paged=$matches[1]” şeklinde ikisi de bulunuyor. Page olan kısmı nasıl silebilirim acaba?

    • admin dedi ki:

      4 nolu “Aldığımız Parametreleri İşlemek” ve 5 nolu “Özel .php Dosyamızda Parametreleri İşlemek” içeriğinde anlatmaya çalıştığım if kontrolünü kullanarak hangi url deseninde hangi sayfanın açılacağını kontrol edebilirsiniz.

  2. Hamdi dedi ki:

    Sürekli sayfa bulunamadı hatası alıyorum. Herşeyi harfiyen yapmama rağmen 🙁

  3. Esra dedi ki:

    Merhaba, benim sorum şu şekilde: mesela abc.com adında domain adım var ve ben bu alan adına blog kurdum adres cubuğunda abc.com/esra şeklinde görünmesini istiyorum . Herhangi bir yazıya tıklandığında ise abc.com/esra/yazi şeklinde görünmesini istiyorum. Bu mümkün mü?

    • Ahmet dedi ki:

      Merhaba Esra,
      Yukarıda bahsettiğin turdeki link yapısı, önerilen bir yapı değildir. Ama yapılabilir. Ftp adresinize giriş yapıp daha sonra public_html klasörünüz içine esra adında bir klasör açıp daha sonra wordpress kurulum dosyalarını bu klasör içine atarak kurulumu gerçekleştirebilirsiniz.
      Bunun yerine subdomain kullanmak daha mantılı gibi görünüyor. Bu sayede esra.abc.com/yazi sekinde link yapınız olacaktır.

    • Mert dedi ki:

      Ayarlar > kalıcı bağlantılar sayfasından özeli seçip ‘/esra/%postname%/’ olarak ayarladığın zaman bağlantılar istediğin gibi olacaktır. (tırnaklar hariç)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir