WordPress PHP Kod Standartları

kategori Wordpress Kod tarih 15.09.2019yazar wpuzman

WordPress kodlarının bir bakışta kolay ve temiz bir şekilde okunabilmesi için wordpress.org tarafından bazı PHP kod standartları belirlenmiştir. Bu standartlara uyarak WordPress developer dünyasında yerimizi daha da sağlamlaştırıyoruz.

Bazı topluluk siteleri (ör: wordpress.org, themeforest.net) bu kod standartlarını oldukça önemsemektedir. Eğer bir projeniz varsa ve bu projeyi belirtilen sitelerde yayımlamak istiyorsanız, sizden bu standartlara uymanız istenebilir.

1. Tırnak İşareti Kullanımı

Kod satırınıza eğer değişken kullanmıyorsanız daima tek tırnak kullanın.

// Burada herangi bir değişken olmadığı için tek tırnak kullandık.
echo '<a href="#test">Test</a>';
// Değişken kullanmak istiyorsanız çift tırnak kullanın.
echo "<a href='$link'>Test</a>";
view raw quotes.php hosted with ❤ by GitHub

Fakat değişkenleri doğrudan kod satırlarında kullanmamanız gerekiyor. Üstteki örnekte $link değişkenini doğrudan yazdırdık. Fakat doğru kullanım aşağıdaki gibi olmalıydı.

echo '<a href="' . esc_attr( $link ) . '">Test</a>';
view raw quotes_1.php hosted with ❤ by GitHub

Değişkenleri doğrudan bastırmamamızın sebebi güvenlik açıklarını önlemek. Bunun için kodlarımızı bastırmadan önce escape yaptırmamız gerekiyor. Detaylı bilgi için wordpress data validation sayfasını inceleyebilirsiniz.

2. Girinti ve Boşluklar

for, foreach, while, if else, array() gibi kod bloklarında daima tab tuşunu kullanarak girinti oluşturun. Boşluk tuşunu kullanmayın. Boşluk tuşunu sadece okunurluğu artırmak için gereken yerlerde kullanın.

// foreach için örnek
foreach( $items as $item ) {
echo $item[ 'title' ];
echo $item[ 'url' ];
echo $item[ 'description' ];
}
// if else için örnek
if( have_posts() ) {
echo 'Yazı Bulundu!';
} else {
echo 'Yazı Bulunamadı!';
echo 'Tüh :(';
}
// array için örnek
$args = array(
'echo' => false,
'include' => array( 1, 2 )
);
view raw indentation.php hosted with ❤ by GitHub

Dizi içerisindeki ögeler birden fazla ise her bir öge için yeni bir satır kullanılmalıdır.

// Tek ögeli dizi için tek satır kullanılmalı.
$query = new WP_Query( array( 'ID' => 123 ) );
// Birden fazla ögeli dizilerde $args gibi değişkene atanarak
// her bir öge için ayrı satır oluşturulmalı.
$args = array(
'post_type' => 'page',
'post_author' => 123,
'post_status' => 'publish',
);
$query = new WP_Query( $args );

Dizi içerisindeki son ögeye de virgül eklemeyi unutmayın. Bu dizinin sırasını değiştirmeyi kolaylaştırır ve daha temiz bir görünüm sunar.

// Doğru kullanım
$args = array(
'post_type' => 'page',
'post_author' => 123,
'post_status' => 'publish',
);
// Yanlış kullanım
$args = array(
'post_type' => 'page',
'post_author' => 123,
'post_status' => 'publish'
);

Switch case bloklarında switch ten sonra 1 tab, case den sonra da 1 tab kullanılmalıdır.

switch( $type ) {
case 'foo':
some_function();
break;
case 'bar':
some_function();
break;
}

3. Parantezler

Parantezler aşağıda gösterilen tarzda olacak şekilde bütün kod bloklarında kullanılmalıdır.

Zorunlu olmasa bile parantez kullanmanız gerekir.

// Doğru kullanım
if( condition ) {
action1();
action2();
} elseif( condition2 && condition3 ) {
action3();
action4();
} else {
defaultaction();
}
// Yanlış kullanım
if( condition ) action1();
if( condition )
action1();
if( condition ):
action1();
endif;
view raw braces.php hosted with ❤ by GitHub

Eğer php kodlarınızın içerisine html kodları da dahil ediyorsanız parantez yerine if/endif kullanabilirsiniz.

<?php if ( have_posts() ) : ?>
<div class="hfeed">
<?php while ( have_posts() ) : the_post(); ?>
<article id="post-<?php the_ID() ?>" class="<?php post_class() ?>">
<!-- ... -->
</article>
<?php endwhile; ?>
</div>
<?php endif; ?>
view raw braces_1.php hosted with ❤ by GitHub

“else if” yerine daima “elseif” kullanın!

4. Array Kullanımı

Kısa array yerine uzun array kullanın. Çünkü uzun array daha okunaklıdır.

// Doğru kullanım
$args = array(
'echo' => false,
'include' => array( 1, 2 ),
);
// Yanlış kullanım
$args = [
'echo' => false,
'include' => [ 1, 2 ],
];
view raw array.php hosted with ❤ by GitHub

5. Fonksiyon İçerisindeki Çağrılar

Bir fonksiyon içerisine dışarıdan çağrı yapıyorsanız bunu değişkenlere atayarak yapmalısınız. Doğrudan fonksiyon içerisinde kullanmamalısınız.

// Doğru kullanım
$foo = array(
'echo' => false,
'include' => 1,
);
$bar = esc_html__( 'Test Yazı', 'text-domain' );
test_fonksiyon( $foo, $bar );
// Yanlış kullanım
test_fonksiyon( array( echo => false, include => 1 ), esc_html__( 'Test Yazı', 'text-domain' ) );
view raw function_call.php hosted with ❤ by GitHub

6. PHP Taglarının Açılıp Kapatılması

PHP kodları içerisinde html kullanıldığında php açıp kapama taglarının (<?php ve ?>) kendilerine ait özel bir satırı olmalıdır.

Tek satırlık kodlarda bu işlem yapılmamalıdır. PHP açma kapama tagları da tek satır içerisinde verilmelidir.

// Açma kapama taglarına özel satır verdik.
function foo() {
?>
<div>
<?php
echo bar(
$baz,
$bat
);
?>
</div>
<?php
}
// Tek satırlık örnek
<input name="<?php echo esc_attr( $name ); ?>" />
// Yanlış Kullanım
if ( $a === $b ) { ?>
<some html>
<?php }
view raw php_tags.php hosted with ❤ by GitHub

7. PHP Taglarının Kullanımı

ÖNEMLİ: Asla kısa php taglarını kullanmayın. Daima uzun olanını kullanın.

// Doğru kullanım
<?php ... ?>
<?php echo $var; ?>
// Yanlış kullanım
<? ... ?>
<?= $var ?>
view raw php_tags_1.php hosted with ❤ by GitHub

8. Satır Sonu Boşlukları

PHP dosyalarında satır sonundaki ?> kapanış etiketini kullanmamanız tavsiye edilir. Ancak eğer kullandıysanız bu satırdan sonra herhangi bir boşluk bırakmadığınıza emin olun.

9. Boşluk Kullanımı

Virgüllerden sonra ve karşılaştırma operatörlerinin her iki tarafında daima boşluk kullanın.

x === 23
foo && bar
! foo
array( 1, 2, 3 )
$baz . '-5'
$term .= 'X'
view raw spaces_1.php hosted with ❤ by GitHub

for, foreach, while, switch ve fonksiyon gibi bloklarda parantez içlerinde boşluk bırakın.

foreach ( $foo as $bar ) { ...
function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...
function my_other_function() { ...
my_function( $param1, func_param( $param2 ) );
my_other_function();
view raw spaces_2.php hosted with ❤ by GitHub

Mantıksal karşılaştırmalardaki parantezlerde de boşluk kullanın.

if ( ! $foo ) { ...
view raw spaces_3.php hosted with ❤ by GitHub

Type casts kullanırken boşlukla beraber daima küçük harf ve kısa olanı kullanmalısınız.

// Doğru kullanım
(int)
(array)
(bool)
foreach ( (array) $foo as $bar ) { ...
$foo = (bool) $bar;
// Yanlış kullanım
(boolean)
(INTEGER)
(INT)
(integer)
(ARRAY)
view raw type_casts.php hosted with ❤ by GitHub

Array içerisindeki ögelerde sadece değişken kullanılmışsa boşluk bırakmalısınız.

$x = $foo['bar']; // doğru
$x = $foo[ 'bar' ]; // yanlış
$x = $foo[0]; // doğru
$x = $foo[ 0 ]; // yanlış
// Sadece değişken olunca boşluk bıraktık.
$x = $foo[ $bar ]; // doğru
$x = $foo[$bar]; // yanlış
view raw spaces_4.php hosted with ❤ by GitHub

Switch bloklarında case yazısından sonra boşluk bırakılmamalıdır.

switch ( $foo ) {
case 'bar': // doğru
case 'ba' : // yanlış
}
view raw spaces_5.php hosted with ❤ by GitHub

Kısaca aksi belirtilmedikçe parantez içlerinde daima boşluk kullanılmalıdır.

if ( $foo && ( $bar || $baz ) ) { ...
my_function( ( $x - 1 ) * 5, $y );
view raw spaces_6.php hosted with ❤ by GitHub

10. SQL Kullanımı

SQL komutlarını kullanırken UPDATE, WHERE gibi sql ifadeler büyük harflerle yazılmalı.

Veritabanı işlemi yapan fonksiyonlar, doğrulamaları ve escape işlemlerini yapmayabilir. Bunu en iyi şekilde yapabilmek için $wpdb->prepare() fonksiyonunu kullanın.

$wpdb->prepare() fonksiyonu sql sorguları için otomatik doğrulama ve escape işlemi yapar. Kullanımı sprintf ile benzerdir.

$var = "dangerous'"; // escape yapılmamış veri
$id = some_foo_number(); // int olması beklenen veri
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );
view raw sql.php hosted with ❤ by GitHub

Yukarıdaki örnekte gördüğümüz üzere bir adet escape yapılmamış veri bir adette int olmasını istediğimiz ama emin olamadığımız veri var. İkisi de güvenlik zafiyeti oluşturmakta. Bu yüzden $wpdb->prepare() kullanarak iki sorundan da kurtulmuş oluyoruz.

UYARI: String ögeleri için %s integer ögeler için %d kullanmalısınız. Aksi halde fonksiyon düzgün çalışmaz. Ayrıca bu iki değeri tırnak içerisine almamalısınız. Bu fonksiyonu kullandığınızda esc_sql() kullanmanıza gerek kalmıyor.

NOT: Veritabanına doğrudan erişmekten kaçının. Bunun yerine WordPress’in var olan fonksiyonlarını kullanın. update_option(), update_post_meta(), update_user_meta() gibi. Eğer işinizi görecek bu tarz fonksiyonlar yoksa o zaman veritabanı sorgularını kullanabilirsiniz.

11. Adlandırma Kuralları

Değişkenlerde, action/filter adlarında ve fonksiyon isimlerinde daima küçük karakterler kullanın. camelCase tarzı isimlendirme asla kullanmayın. Kelimeleri alt çizgi ile ayırın. Değişken isimlerini gereksiz yere kısaltmayın. İsimler açık ve anlaşılır olsun.

// Doğru kullanım
function test_fonksiyon_ismi( $test_degisken_ismi ) { ... }
// Yanlış kullanım
function testFonksiyonIsmi( $testDegiskenIsmi ) { ... }
view raw naming.php hosted with ❤ by GitHub

Class isimlerinin ilk harfi Büyük olmalı ve kelimeler al çizgi ile ayrılmalıdır. Eğer kısaltma isim kullanılıyorsa tamamı BÜYÜK HARF olmalıdır.

class Walker_Category extends Walker { [...] }
class WP_HTTP { [...] }
view raw naming_1.php hosted with ❤ by GitHub

Sabit değişkenler (constants – define) tamamen büyük harfle yazılmalı ve kelimeler alt çizgi ile ayrılmalı.

define( 'DOING_AJAX', true );
define( 'TEST_DENEME_DEGISKENI', 'test' );
view raw naming_2.php hosted with ❤ by GitHub

Dosya isimleri küçük harfle yazılmalı ve kelimeler tire ile ayrılmalı. Örneğin: deneme-dosya.php

Class dosyaları class- ön eki ile başlamalı ve devamı içerisindeki class adı ile getirilmeli. Örneğin içerisindeki class adı WP_Error ise dosya adı class-wp-error.php olmalı.

12. Fonksiyon Argümanları

Fonksiyon argümanlarında boolean yani true, false kullanmayın. Çünkü bu kullanım fonksiyonun anlaşılmasını zorlaştırır.

// Yanlış kullanım
function eat( $what, $slowly = true ) {
...
}
// Doğru kullanım
function eat( $what, $speed = 'slowly' ) {
...
}
view raw function_args.php hosted with ❤ by GitHub

13. Karşılaştırmalar

Karşılaştırma yaparken değişkenleri daima sağ tarafta tutun. Ayrıca daima üçlü işaretleri kullanmaya özen gösterin. ===, !== gibi.

// Doğru kullanım
if( true === $variable ) {
...
}
// Yanlış kullanım
if( $variable == true ) {
...
}
view raw conditions.php hosted with ❤ by GitHub

14. Temiz Kodlama

Genel olarak okunabilirlik, akıllı veya kısa kodlamadan daha iyidir.

// Bu kod gayet akıllıca ve kısa. Fakat düzgün anlaşılmıyor.
isset( $var ) || $var = some_function();
// Bu daha iyi ve anlaşılır.
if ( ! isset( $var ) ) {
$var = some_function();
}
// Yanlış kullanım
if ( $data = $wpdb->get_var( '...' ) ) {
// Use $data
}
// Doğru kullanım
$data = $wpdb->get_var( '...' );
if ( $data ) {
// Use $data
}
view raw clever_code.php hosted with ❤ by GitHub

15. extract() Kullanmayın

extract() fonksiyonunda hata ayıklama işlemi çok zordur ve anlaşılması da pek kolay değildir. Bu yüzden kullanmaktan kaçının.

Kategoriler: Wordpress Kod

Tags: