lostyazilim
tr.link

WordPress Eklenti Nasıl Yazılır? - Sıfırdan Eklenti Yazıyoruz

9 Mesajlar 2.868 Okunma
acebozum
tr.link

Lions Lions WM Aracı Kullanıcı
  • Üyelik 05.05.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web-Developer
  • Konum İstanbul Avrupa
  • Ad Soyad M** K**
  • Mesajlar 1025
  • Beğeniler 366 / 534
  • Ticaret 5, (%100)

Herkese selamlar. Bu başlık altında sıfırdan WordPress eklentisi nasıl yazılır ve WordPress.org'da nasıl yayınlanır buna değineceğiz. Vakit kaybetmeden başlayalım :)

Öncelikle WordPress, mevcut FTP dosyalarında, eklenti yolu olarak ''/wp-content/plugins'' klasörünü kullanır. Tüm işlemlerimizi bu klasörde gerçekleştiriyor olacağız.


Adım 1 - FTP Eklenti Dosyalarını Oluşturma

Öncelikle ''wp-content/plugins'' klasörünün içine, klasör > yeni klasör ekle diyerek hazırlamak istediğimiz eklentinin klasörünü oluşturuyoruz.



Adım 2 - Eklenti PHP Dosyası Oluşturma

Eklenti klasörümüzü oluşturduktan sonra, bu klasörün içerisinde, dosya > yeni dosya diyerek ''index.php'' adında bir dosya oluşturuyoruz. Bu dosya, eklentimizin admin panelindeki ana sayfası olacak.



Adım 3 - Eklentimizi Panelimize Tanıtma

Sıra geldi eklentimizin index.php dosyasını düzenleyerek, eklentimizi, admin panelimize tanıtacağız. Buradaki kodların ne anlama geldiklerine kısaca değinelim:



Defined

if ( ! defined( 'ABSPATH' ) ) exit;

defined, WordPress'in eklenti güvenliği için tüm developerlardan beklediği bir güvenlik sorgusudur. Admin yetkilendirmesi dışında erişim sağlanırsa, ziyaretçiyi eklenti sayfasından atmaktadır.

add_action

add_action('admin_menu', 'wmaraci_eklentisi');

add_action ile ''wmaraci_eklentisi'' adında yeni bir aksiyon başlattığımızı WordPress'e bildiriyoruz.

Fonksiyon


function wmaraci_eklentisi() {
add_menu_page('WmAraci Eklentisi', 'WmAraci', 'manage_options', 'wm-araci-eklenti', 'wm_araci_fonksiyon');
}


Fonksiyonumuzu oluşturuyoruz ve admin panelinde eklentimizi yapılandırıyoruz. add_menu_page adından da anlayacağınız gibi admin panelinde menü ve eklenti yerleşimini tanıttığımız bir kısım. Burada:

WmAraci Eklentisi = Sayfa Başlığımız;
WmAraci = Menüdeki İsmi
wm-araci-eklenti = Eklentimizin URL'i.
wm_araci_fonksiyon = Eklenti sayfamızda kullanacağımız fonksiyon.


Adım 4 - Eklentimizi Panelden Kontrol Etme

Dosyamızı oluşturduk, fonksiyonlarımızı hazırladık ve eklentimizi panelimize tanıttık. Şimdi panelden kontrolünü sağlıyoruz.



Harika! Eklentimiz artık panelimizde ve aktif :) Sıra geldi fonksiyonlarımızı yazmaya ve yapmak istediğimiz değişikliklere :)

Adım 5 - Fonksiyonları Hazırlama

Eklenti sayfamızdaki yansımasını görmek için deneme amaçlı bir echo paylaştım ve kontrolümü sağladım. Eklentim sorunsuz bir şekile bağlantısını sağladı. Artık üretmek istediğim tüm fonksiyonları hazırlamaya başlayabilirim. Buradaki eğitimde, sitemizin herhangi bir yerinde kısakod ile paylaşmak istediğimiz kampanya görseli ve butonu hazırlayacağız.






Adım 6 - Kurguyu Kodlama

Örnek bir kampanya divi oluşturuyorum ve içerisinde görselimi ve butonumu ekliyorum.



Burada dikkat edersiniz function wm_araci_fonksiyon() fonksiyonuma girdikten sonra ''?>'' iler PHP'mi kapattım ve HTML kodlarımdan sonra tekrar açarak fonksiyonumu bitirdim. Bunu yapmamdaki amaç, php içinde düz bir şekilde HTML veya JS kodları yazamıyor olmamız. Bunun için, ister benim yaptığım şekliyle yapabiliriz, isterseniz echo '
' kullanarak PHP kapatmadan HTML kodlarınızı yazdırabilirsiniz. Ancak echo ile yazdırılan JS kodları çoğu zaman çalışmamaktadır.



Kontrolümü sağladığımda div ve butonum hazır. Ancak şimdi geldi eklentimize CSS ve IMAGES dosyalarımızı eklemeye :)

Adım 7 - İhtiyaç Duyulan Diğer Klasörleri Hazırlama

Eklentimde kullanacağım CSS ve IMAGES dosyaları için bu dosyaların barınacağı klasörleri açıyorum.



Klasörlerimi açtığıma göre sıra geldi kampanya tasarımımda kullanacağım görselimi hazırlamaya ve images klasörüme yüklemeye. :)


Adım 8 - Materyalleri Hazırlama

Kampanya görseli olarak bu görseli kullanacağım.



Şimdi görselimi images klasörüne yüklüyor ve ardından kodlarıma dahil ederek kontrolünü sağlıyorum.



Harika! Görselim başarıyla eklendi. Burada dikkat etmeniz gereken nokta şudur:

image adresini verirken:

kampanya

olarak ekledim. Burada sık yapılan hatalardan birisi, doğrudan dosyanın tüm adresini yazmaktır. Yani orada PHP başlatıp plugins_url yerine genel kullanım ''/wp-content/plugins/wmaraci-wordpress-eklentisi/images/kampanya.jpg'' şeklindedir. Ancak WordPress bu dosya çağırma yolunu kabul etmez. Çünkü WordPress açık kaynak kodlu ve düzenlemeye müsait bir sistemdir. Yani herhangi birisi /wp-content/ yolunun adını değiştirebilir. /wp-dosyalarim/ olarak kullanabilir. Bu yüzden eklentimizin bulunduğu klasörü, WordPress'in otomatik bulmasını sağlıyoruz.

Adım 9 - CSS Hazırlama ve Çağırma

Görselimi başarıyla hazırladıktan sonra sıra geldi butonuma biraz şekil vermeye :) Bunun için CSS klasörüme gidiyor ve eklentim için bir CSS dosyası açarak, bu dosyayı eklentime dahil ediyorum.



Dosyamı oluşturdum ve şimdi wp_enqueue_style ile eklentime dahil ediyorum.



Burada dikkat etmeniz gereken bir diğer unsur ise, WordPress pluginlerine style ve js dahil ederken wp_enqueue_style ve wp_enqueue_script komutlarını kullanmanızdır. WordPress stil dosyalarının ve js dosyalarının bu şekilde çağrılmasını istiyor. CSS dosyamı da dahil ettiğime göre sıra geldi butonuma id verip CSS ile tasarımını değiştirmeye.



CSS kodlarımı hazırladım ve son olarak kampanya görselimin nasıl göründüğünü kontrol ediyorum.



Harika! Görselim artık paylaşıma hazır. Sıra geldi kısakod oluşturarak görselimi istediğim yerlere eklemeye.

Not: kısa kod oluşturarak ekleme dışında pek çok gösterim yöntemi kullanabilirsiniz. En çok sorulan kısa kod oluşturma olduğu için anlattım.


Adım 10 - Kısa Kod Oluşturma



Burada kısa kod oluşturmak için:


add_shortcode('wm_butonum', 'wm_buton');
function wm_buton() {}


fonksiyonunu kullandım ve eklentime dair tüm divleri bu fonksiyonumun içine aldım. Böylece artık websitemde her nereye [wm_butonum][/wm_butonum] kısa kodunu eklersem, hazırladığım kampanya görselim çıkacak. Haydi deneyelim ve görelim.

Adım 11 - Eklentinin Çalışılabilirliğini Kontrol Etme

Örnek bir WordPress Ana sayfasına hazırladığım eklentimin kısa kodunu ekliyorum.





Harika! Artık eklentim kullanıma hazır ve başarıyla çalışıyor! Sıra geldi son aşama olan WordPress.Org'a eklentimizi göndermeye.

Not: WordPress'de eklentinizi yayınlama zorunluluğunuz yoktur. Sadece kendinizin kullanacağı eklentileri yayınlama talebinde bulunmadan kullanabilirsiniz.

Adım 12 - Eklentiyi WordPress.Org'a Göndermek

Bu kısımda eklentimizi WordPress'e göndermek ve yayın talebinde bulunmak için öncelikle eklentimizin ne olduğu ve nasıl çalıştığına dair bir readme.txt dosyası hazırlıyoruz. Ardından eklenti dosyamızı .zip yaparak sıkıştırıp aşağıdaki adrese gönderiyoruz.

https://wordpress.org/plugins/developers/add/

Ortalama 1 hafta içerisinde, WordPress düzeltmemizi istediği hatalar varsa bunları bizimle paylaşıyor, yahut kabul ediliyse yayına almaya hazır hale geliyor. Eklenti taslak dosyalarını ekte paylaşıyorum. Şimdiden herkese kolay gelsin :)

Lions

Eklenti taslağı: https://dosya.co/6ezo2zdk4g9o/wmaraci-wordpress-eklentisi.zip.html

PasifikYob webloggi Abdullahx

kişi bu mesajı beğendi.

elektronikssl
webimgo

PasifikYob PasifikYob WM Aracı Kullanıcı
  • Üyelik 30.07.2015
  • Yaş/Cinsiyet 35 / E
  • Meslek OOP
  • Konum Ankara
  • Ad Soyad Ö** M**
  • Mesajlar 66
  • Beğeniler 13 / 13
  • Ticaret 0, (%0)
Takip eklentisi yazabilirmisiniz Twitter gibi. Kullanıcı giriş yaptığında anasayfada sadece takip ettiği kişinin yazılarını görecek, böyle birşeyi nasıl yaparız?
 

 

Lions Lions WM Aracı Kullanıcı
  • Üyelik 05.05.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web-Developer
  • Konum İstanbul Avrupa
  • Ad Soyad M** K**
  • Mesajlar 1025
  • Beğeniler 366 / 534
  • Ticaret 5, (%100)
PasifikYob , Elbette rahatlıkla yapılabilir. Öncelikle kullanıcıların olduğu veritabanı tablosuna yeni bir sütun açarsınız örneğin 'takipler' diye.

Ardından her üyenin profiline bir tane ''Takip Et'' butonu eklersiniz.

Örneğin benim üye id'm = '5' sizin üye id'niz = '9' olsun. Ben sizin profiline girip, sizi takip et butonuna bastığım zaman şöyle bir sorgu çalışır;

UPDATE tablo SET takipler = '9' WHERE uyeid = '5'

Burada üyeid kısmını dinamik yaparsınız. Böylece 5 id li üyenin yani benim veritabanımdaki takipler tabloma sizin idniz eklenmiş olur.

Ardından tüm üyeler için, üye sayfalarına şöyle bir sorgu eklersiniz:



$sql = "SELECT takipler FROM tablo WHERE uyeid = '5'";
$sorgu = $db->($sql);
$sayma = $sorgu->rowCount();

if($sayma > 0) {

foreach($sorgu as $yazdir) {
$sonuc = $yazdir['takipler'];
}

$cekmeislemi = "SELECT uye_yazisi FROM tablo WHERE uyeid = '$sonuc'";
$cekme = $sorgu = $db->($cekmeislemi);
$saydirma = $cekme->rowCount();

if($saydirma > 0) {

foreach($cekme as $uyeyazdir) {

$uyeyazilari = $uyeyazdir['uye_yazisi'];
print_r($uyeyazilari);

}
}
}



Burada şu mantığı uyguladık:

Ben üye olarak sayfama giriş yaptığım zaman bir SQL sorgusu çalıştı ve benim ''takipler'' tablomda kayıtlı idleri getirdi. Eğer benim takipler tablomda id varsa yani satır sayısı 0'dan büyükse o halde takip ettiğim idleri foreach ile kenara yazdı.

Ardından yeni bir SQL sorgusu çalıştı ve benim takip ettiğim idlerin, üye_yazisi yani paylaştıkları yazıların yer aldığı sütunları sorguladı. Eğer burada da sorgu 0'dan büyükse yani benim takip ettiklerim bir şey paylaşmışsa o zaman yine foreach ile onların yazılarını alıp, print_r ile kendi sayfama yazdırmış oldum.

Böylece kim kimi takip ederse sadece takip ettiği kişinin yazılarını kendi sayfasında görmüş oldu.
PasifikYob

kişi bu mesajı beğendi.

yilmaz70 yilmaz70 Güzel olacak Kullanıcı
  • Üyelik 03.02.2017
  • Yaş/Cinsiyet 54 / E
  • Meslek Web Tasarım
  • Konum İstanbul Anadolu
  • Ad Soyad D** K**
  • Mesajlar 4765
  • Beğeniler 3157 / 3156
  • Ticaret 12, (%100)
Güzel paylaşım olmuş tebrik ediyorum.

Eklenti taslağı: adresi hata veriyor bilginiz olsun.

Başarılar dilerim.
Lions

kişi bu mesajı beğendi.

wmaraci
wmaraci

Lions Lions WM Aracı Kullanıcı
  • Üyelik 05.05.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web-Developer
  • Konum İstanbul Avrupa
  • Ad Soyad M** K**
  • Mesajlar 1025
  • Beğeniler 366 / 534
  • Ticaret 5, (%100)
yilmaz70 , Kıymetli yorumunuz için teşekkür ederim, ben tıkladığım zaman otomatik download başlıyor, başka sorun yaşayan varsa farklı bir yere yükleyeyim?
yilmaz70

kişi bu mesajı beğendi.

yilmaz70 yilmaz70 Güzel olacak Kullanıcı
  • Üyelik 03.02.2017
  • Yaş/Cinsiyet 54 / E
  • Meslek Web Tasarım
  • Konum İstanbul Anadolu
  • Ad Soyad D** K**
  • Mesajlar 4765
  • Beğeniler 3157 / 3156
  • Ticaret 12, (%100)

Lions adlı üyeden alıntı

yilmaz70 , Kıymetli yorumunuz için teşekkür ederim, ben tıkladığım zaman otomatik download başlıyor, başka sorun yaşayan varsa farklı bir yere yükleyeyim?


403 Forbidden
Access to this resource on the server is denied!

Chrome ve Opera tarayıcıda aynı hatayı veriyor.
Lions

kişi bu mesajı beğendi.

Lions Lions WM Aracı Kullanıcı
  • Üyelik 05.05.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web-Developer
  • Konum İstanbul Avrupa
  • Ad Soyad M** K**
  • Mesajlar 1025
  • Beğeniler 366 / 534
  • Ticaret 5, (%100)
yilmaz70 , Güncelledim linki :)
yilmaz70

kişi bu mesajı beğendi.

PasifikYob PasifikYob WM Aracı Kullanıcı
  • Üyelik 30.07.2015
  • Yaş/Cinsiyet 35 / E
  • Meslek OOP
  • Konum Ankara
  • Ad Soyad Ö** M**
  • Mesajlar 66
  • Beğeniler 13 / 13
  • Ticaret 0, (%0)

Lions adlı üyeden alıntı

PasifikYob , Elbette rahatlıkla yapılabilir. Öncelikle kullanıcıların olduğu veritabanı tablosuna yeni bir sütun açarsınız örneğin 'takipler' diye.

Ardından her üyenin profiline bir tane ''Takip Et'' butonu eklersiniz.

Örneğin benim üye id'm = '5' sizin üye id'niz = '9' olsun. Ben sizin profiline girip, sizi takip et butonuna bastığım zaman şöyle bir sorgu çalışır;

UPDATE tablo SET takipler = '9' WHERE uyeid = '5'

Burada üyeid kısmını dinamik yaparsınız. Böylece 5 id li üyenin yani benim veritabanımdaki takipler tabloma sizin idniz eklenmiş olur.

Ardından tüm üyeler için, üye sayfalarına şöyle bir sorgu eklersiniz:



$sql = "SELECT takipler FROM tablo WHERE uyeid = '5'";
$sorgu = $db->($sql);
$sayma = $sorgu->rowCount();

if($sayma > 0) {

foreach($sorgu as $yazdir) {
$sonuc = $yazdir['takipler'];
}

$cekmeislemi = "SELECT uye_yazisi FROM tablo WHERE uyeid = '$sonuc'";
$cekme = $sorgu = $db->($cekmeislemi);
$saydirma = $cekme->rowCount();

if($saydirma > 0) {

foreach($cekme as $uyeyazdir) {

$uyeyazilari = $uyeyazdir['uye_yazisi'];
print_r($uyeyazilari);

}
}
}



Burada şu mantığı uyguladık:

Ben üye olarak sayfama giriş yaptığım zaman bir SQL sorgusu çalıştı ve benim ''takipler'' tablomda kayıtlı idleri getirdi. Eğer benim takipler tablomda id varsa yani satır sayısı 0'dan büyükse o halde takip ettiğim idleri foreach ile kenara yazdı.

Ardından yeni bir SQL sorgusu çalıştı ve benim takip ettiğim idlerin, üye_yazisi yani paylaştıkları yazıların yer aldığı sütunları sorguladı. Eğer burada da sorgu 0'dan büyükse yani benim takip ettiklerim bir şey paylaşmışsa o zaman yine foreach ile onların yazılarını alıp, print_r ile kendi sayfama yazdırmış oldum.

Böylece kim kimi takip ederse sadece takip ettiği kişinin yazılarını kendi sayfasında görmüş oldu.



Takip etme olayını bir eklenti ile yaptım. eklenti veri tabanında follow diye bir tablo oluşturdu. Tablonun görüntüsü şu şekilde

https://hizliresim.com/nJgKq5

user_id1 yazan kısım takip edilenleri ifade ediyor. Şimdi wordpress de bir yazıların listelendiği anasayfa var. Bu anasayfa da giriş yapan kullanıcılar sadece takip ettikleri kişilerin yazılarını görecekler. yapmak istediğim bu, giriş yapmamış kullanıcılar ise normal sayfayı. Yukarıdaki daha önce yazmış olduğun kodun mantığını anladım fakat tam olarak bu işi görür mü? Vaktin olduğu bir sırada cevap yazarsan sevinirim.
 

 

Lions Lions WM Aracı Kullanıcı
  • Üyelik 05.05.2017
  • Yaş/Cinsiyet 29 / E
  • Meslek Web-Developer
  • Konum İstanbul Avrupa
  • Ad Soyad M** K**
  • Mesajlar 1025
  • Beğeniler 366 / 534
  • Ticaret 5, (%100)
PasifikYob , Evet işe yarar. Önemli olan şart koymanız. Yani session başlıyorsa (üye girişi yapılmışsa) ardından o üyenin takip ettiği kişilerin paylaşımları, o kişinin duvarında görünecek. else yani eğer herhangi bir session yoksa yani giriş yapılmamışsa, ziyaretçi olduğu için şunları şunları görecek diye.