Bu konunun kaynağı buradaki yazıdır.
Forumda eklenti kullanmadan, sadece bir kaç satır kodla yapılabilecek "Nasıl yaparım?" konuları sıklıkla açılıyor. Bir çoğunda eklenti öneriyoruz ama aslında bazen hiç gerek olmuyor. Temel mantığı anlatabilmek ve bir kaç örnek sunabilmek açısından hem başlangıç olarak ilgili linkteki yazıyı paylaşayım hem de ihtiyacınızı giderebilecek kod parçacıkları olursa konu altından paylaşarak ufak bir derleme yapayım istedim.
Buradan sonraki kısım yazıdan alıntıdır.
Not: Daha anlaşılabilir ve yazım açısından kendi dilime uygun olması açısından birebir çeviri yapmadım.
Wordpress'in işlevselliğini artırmak amacıyla eklentileri kullanabiliyoruz. Fakat bazı durumlarda eklenti kullanmadan ihtiyaçlarımızı halletmek daha kolay ve sunucu yükü bağlamında daha avantajlı: Üstteki yönetici çubuğunu kaldırmak gibi. Bunu ufak bir kod parçacığıyla halletmek mümkün.
Temel olarak kod parçacıkları belirli eylemleri eklenti kullanmadan halletmemize yarar. Genel olarak, bu kod parçacıkları Wordpress'in çekirdek ya da tema dosyalarına(genellikle functions.php) yerleştirilir. Aşağıda kullanışlı kod parçacıklarından bir kaç örnek listeleyip; ihtiyaçlarınızı belirtmeniz durumunda onlar için de yardımcı olmaya çalışalım.
UYARI: Kod parçacıkları varsayılan işlevleri değiştirme eğilimindedir. Her kod parçacığınd küçük bir hata payı olabilir. Genel olarak bu tür sorunlar uyumsuz eklenti ya da tema nedeniyle ortaya çıkmaktadır. Söz konusu eklentiyi ya da temayı kaldırdığınızda/değiştirdiğinizde ya da parçacığı kullanmamaya karar verip sildiğinizde sorunlar da ortadan kalkmaktadır. (Aynı durum eklentilerin çakışmaları ya da eklentilerin kullanılan temanın fonksiyonlarıyla çakışması vb. gibi durumlarda da geçerlidir.)
Bununla birlikte her yeni eklenti/tema değişikliğinde olduğu gibi kod parçacıklarını da kullanmadan önce ilgili dosyanın yedeğini almanız önerilir. Ayrıca herhangi bir hata ya da performans sorunuyla karşılaştığınızda yedeğinize dönüp, eklenti ya da tema uyuşmazlığı olduğunu kontrol etmeniz gerekmektedir.
Kod Parçacıkları:
1. İçerik Sağlayıcılara Resim Ekleme Yetkisi Verin
Wordpress varsayılan olarak içerik sağlayıcıların resim eklemelerine izin vermez. Tabii ki ilgili hesabı/hesapları yazar ya da editör hesabına terfi ettirerek bu izni vermeniz mümkün fakat bu aynı zamanda kendi makalelerini onay sürecine tabii olmadan yayınlamalarına da imkan verir. Temanızın function.php dosyasına ekleyeceğiniz bu kod parçacığıyla içerik sağlayıcılara başka herhangi bir ayrıcalık ya da hak vermeden makalelerine resim eklemeleri imkanı tanıyabilirsiniz.
if ( current_user_can('contributor') && !current_user_can('upload_files') )
add_action('admin_init', 'allow_contributor_uploads');
function allow_contributor_uploads() {
$contributor = get_role('contributor');
$contributor->add_cap('upload_files');
}2. Eklenti Olmadan Popüler Yazıları GösterinBu biraz daha kurnazca. Sınırlı sunucu belleğiniz ya da disk alanınız var ise, fazladan bir eklenti kullanmadan popüler yazıları listemelek istiyorsanız bu kod parçacığını kullanabilirsiniz:
function count_post_visits() {
if( is_single() ) {
global $post;
$views = get_post_meta( $post->ID, 'my_post_viewed', true );
if( $views == '' ) {
update_post_meta( $post->ID, 'my_post_viewed', '1' );
} else {
$views_no = intval( $views );
update_post_meta( $post->ID, 'my_post_viewed', ++$views_no );
}
}
}
add_action( 'wp_head', 'count_post_visits' );Daha sonra popüler yazıları göstermek istediğiniz tema dosyanıza bu kodları ekleyin:$popular_posts_args = array( 'posts_per_page' => 3, 'meta_key' => 'my_post_viewed', 'orderby' => 'meta_value_num', 'order'=> 'DESC' ); $popular_posts_loop = new WP_Query( $popular_posts_args ); while( $popular_posts_loop->have_posts() ): $popular_posts_loop->the_post(); // Loop continues endwhile; wp_reset_query();3. Sitenizi Kötü Amaçlı İsteklerden Koruyun
Web sitenizi güvenli hale getirmenin çeşitli yöntemleri vardır. Bir güvenlik eklentisi yükleyebilir, bir firewall kullanabilir ya da Jetpack Protect gibi ücretsiz bir araç kullanabilirsiniz. Ya da aşağıdaki kod parçacığıyla tüm kötü amaçlı istekleri reddedebilirsiniz:
global $user_ID; if($user_ID) {
if(!current_user_can('administrator')) {
if (strlen($_SERVER['REQUEST_URI']) > 255 ||
stripos($_SERVER['REQUEST_URI'], "eval(") ||
stripos($_SERVER['REQUEST_URI'], "CONCAT") ||
stripos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||
stripos($_SERVER['REQUEST_URI'], "base64")) {
@header("HTTP/1.1 414 Request-URI Too Long");
@header("Status: 414 Request-URI Too Long");
@header("Connection: Close");
[MENTION=3317]ExiT[/MENTION];
}
}
}4. Eklenti Kullanmadan Sayfalama YapınSayfalama yapmak, ziyaretçilerin sitenizde gezmesini kolaylaştırmak için çok kullanışlıdır. "Önceki" ya da "Sonraki" gibi bağlantılar vermek yerine sayfalama yapmak için bu kod parçacığını kullanabilirsiniz:
global $wp_query;
$total = $wp_query->max_num_pages;
// only bother with the rest if we have more than 1 page!
if ( $total > 1 ) {
// get the current page
if ( !$current_page = get_query_var('paged') )
$current_page = 1;
// structure of "format" depends on whether we're using pretty permalinks
$format = empty( get_option('permalink_structure') ) ? '&page=%#%' : 'page/%#%/';
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => $format,
'current' => $current_page,
'total' => $total,
'mid_size' => 4,
'type' => 'list'
));
}5. Yönetici Çubuğunu Devre Dışı BırakınYönetici çubuğu yeni yazı/sayfa ekleme gibi temel işlevlere pratik kısayolları sunar. Kullanma gereği duymazsanız kaldırmak için şu kod parçacığını kullanmanız yeterli:
// Remove the admin bar from the front end add_filter( 'show_admin_bar', '__return_false' );6. RSS'de Önizleme Resmi Gösterin
RSS akışında küçük önizleme resimleri göstermek isterseniz bu kod parçacığını kullanabilirsiniz:
// Put post thumbnails into rss feed
function wpfme_feed_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = '' . $content;
}
return $content;
}
add_filter('the_excerpt_rss', 'wpfme_feed_post_thumbnail');
add_filter('the_content_feed', 'wpfme_feed_post_thumbnail');7. Yazar Kalıcı Bağlantısını DeğiştirinWordpress'de varsayılan olarak yazar profilleri siteniz.com/author/kullanıcıadi şeklinde gösterilir. Bu kod parçacığıyla kalıcı bağlantı yapısınındaki author kısmını istediğimiz gibi değiştirebiliriz:
Aşağıdaki kod parçacığıyla siteadi.com/profil/kullanıcıadı yaptık.
add_action('init', 'cng_author_base');
function cng_author_base() {
global $wp_rewrite;
$author_slug = 'profil'; // burayı istediğiniz gibi değiştirebilirsiniz.
$wp_rewrite->author_base = $author_slug;
}8. Twitter Kullanıcı Adlarına Otomatik Link EkleyinAşağıdaki kod parçası içeriğinizdeki tüm @mention 'lar için twitter profiline link oluşturur: Örneğin; içeriğinize @happy eklerseniz twitter.com/happy otomatik olarak bir bağlantı sağlar.
function content_twitter_mention($content) {
return preg_replace('/([^a-zA-Z0-9-_&])@([0-9a-zA-Z_]+)/', "$1<a href="http://twitter.com/$2" target="_blank" rel="nofollow">@$2</a>", $content);
}
add_filter('the_content', 'content_twitter_mention');
add_filter('comment_text', 'content_twitter_mention');9. Paypal Bağışı İçin Shortcode OluşturunZiyaretçilerden Paypal aracılığıyla bağış kabul ediyorsanız, bu kod parçacığını bir shortcode oluşturmak için kullanabilirsiniz:
function donate_shortcode( $atts, $content = null) {
global $post;extract(shortcode_atts(array(
'account' => 'your-paypal-email-address',
'for' => $post->post_title,
'onHover' => '',
), $atts));
if(empty($content)) $content='Make A Donation';
return '<a rel="nofollow" href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business='.$account.'&item_name=Donation for '.$for.'" title="'.$onHover.'">'.$content.'</a>';
}
add_shortcode('donate', 'donate_shortcode');Ardından [donate] kodunu aşağıdaki gibi kolaylıkla kullanabilirsiniz:[donate]İçerik[/donate]
10. Anasayfada Belli Kategorileri Göstermeyin
Buradaki konuda bir arkadaş talep ettiğinde paylaşmıştım. Buraya da ekleyeyim:
add_action( 'pre_get_posts', 'excludecats' );
function excludecats( $query ) {
if ( $query->is_home() ) {
$query->set( 'cat', '-1, -2, -7' );//1,2,7 kategori idleri. Istemediginiz kat. idsi ile degistirmelisiniz.
}
return $query;
}11. Dosya Türleri Yüklemelerine İzin Verin / EngelleyinBuradaki konuda arkadaş belli bir dosya türü için yükleme isteği istemişti. Wordpress'te varsayılan olarak izin verilen dosya türleri şurada listelenmiş.
Aşağıdaki kod parçacığıyla hem varsayılan yüklemeye izin verilen dosyaları kısıtlayabilir, hem de varsayılan olarak izin verilmeyen dosya türlerine izin verebiliriz.
add_filter( 'upload_mimes', 'my_myme_types', 1, 1 );
function my_myme_types( $mime_types ) {
$mime_types['png'] = 'image/svg+xml'; // .svg yüklemesine izin verdik
$mime_types['json'] = 'application/json'; // .json yüklemesine izin verdik
unset( $mime_types['xls'] ); // .xls uzantılı dosyalarının yüklenmesini engelledik
unset( $mime_types['xlsx'] ); // .xlsx uzantılı dosyaların yüklenmesini engelledik
return $mime_types;12. Admin Paneldeki Toplu Eylemleri KısıtlayınBirden fazla editöre sahip sitelerde kazayla yazıların silinmesi gibi durumların önüne geçmenize yarayacak kod parçacığı:
add_filter( 'bulk_actions-edit-post', 'toplu_silme' );
function toplu_silme( $actions ) {
unset( $actions['trash'] );
return $actions;
}BKZ: bulk_actions filterisinin kullanımı ve değişkenler.-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hem makalede listelenen hem de forumda talep edildiğine denk geldiğim istekleri karşılayacak ufak bir derleme oldu. Fakat bunlardan daha binlerce tane çıkarabiliriz.
Aklınıza gelen ya da ihtiyaç olan durumları belirtirseniz onları da listeye ekleyerek bir snippet arşivi oluşturabiliriz.