WordPress Kullanıcıları için olmazsa olmaz kod parçaları
WordPress kullanıp da eklentilere muhtaç olmayan pek yoktur galiba; birileri gerçekten WordPress kullandım, panelde işlem yaptım dediyse şayet.. Çünkü açık kaynak kodlu bir alt yazılım olan WordPress için milyonlarca alternatif amaca hizmet eden eklenti, uygulama, kod türevi ve mevcut durumu çözücü çareler üretilmiştir.
Bu yazımızda WordPress kullanıcılarının manuel olarak genelde tema ve çekirdek dosyalarına eklemeler yaparak basit ancak hayati konularda kolaylık yaratabilecek “Code Snippet” lakaplı kod parçalarından bahsedeceğiz. Arşiv amacıyla sisteme eklenen bu kod parçalarının hepimizin işine yaraması ümidiyle.
1. Katılımcı / İçerik Sağlayıcı (Contributor) rolündeki kullanıcılara resim yükleme izni verme
Yazar ve Editör dışında (yöneticileri saymıyoruz) kullanıcıların görsel yükleme yetkisi varsayılan WordPress çekirdek rol modellerinde maalesef mevcut değildir. Bu ufak kod parçasıyla temanızın functions.php dosyasına ekleme yaparak İçerik Sağlayıcı rolüne sahip üyelerinize görsel yükleme izni verebilirsiniz.
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. WordPress Tekil Yazılarınızda Popüler Gönderileri Gösterme
Mutlaka WordPress temasında bu özellik mevcut mu diye göz atarsınız, ancak yok ise ya eklenti kullanır ya da böyle manuel kodlama ile temanıza çok tutan gönderileri göstermesi için çareler ararsınız. Bu kod parçasıyla yine temanızın functions.php dosyasına müdahale ederek popüler gönderileri kullanıcılara otomatik olarak gösterebilirsiniz.
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' );
Kodlama ile birlikte artık temanızda popüler gönderilerin verileri çekiliyor, temanızda gönderinizin tam olarak neresinde istiyorsanız bu kodları yine ekleme yaparak gösterim sağlayabilirsiniz.
$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. WordPress Arama Fonksiyonunu Kapatma
Bir çok sorgu yöntemi ile birlikte Query açıklarından faydalanan kötü niyetli dostlarımızla savaşma bahanesi üretmemek için, WordPress çekirdeğinde yer alan temel arama fonksiyonunu iptal edebilirsiniz. Arama sorgularının sonuçlarından faydalanan ve arama fonksiyon açığını kullanan saldırı girişimlerini functions.php dosyasına ufak bir kod parçası ekleyerek engelleyebiliriz.
function fb_filter_query( $query, $error = true ) {
if ( is_search() ) {
$query->is_search = false;
$query->query_vars[s] = false;
$query->query[s] = false;
// to error
if ( $error == true )
$query->is_404 = true;
}
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );
4. Sitenizi Şüpheli Girişimlerden Koruyun
İnternet sitenizi eğer WordPress kullanıyorsanız, sitenizi korumak için bir güvenlik duvarından fazlası gerekiyor; çok daha güvenli bir hale getirmellisiniz. Zira en az beş eklenti ve bir temayla sistemi stabilize edebiliyorken, bizi korkutan durum ise: her eklentinin veya tema bileşeninin virüs dağılımına eşlik ettiği ve özellikle ikinci el piyasasında viral dağılımın çok daha hızlı gerçekleştiriyor olmasıdır. WordPress şüpheli giriş aktivitesini engellemek için minik bir kod eklemek faydalı olacaktır.
Yine temamızın functions.php dosyasına uygun bir ekleme yaparak, şüpheli aktiviteyi minimize etmeye çalışabilirsiniz.
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");
@exit;
}
}
}
5. Sitenizde eklenti olmadan sayfalandırma yapın
Genel olarak kullanılan ve çoğunlukla eklentlerden faydalandığımız “İleri” ve “Geri” butonlarından fazlasını ufak bir kod parçacığı yardımıyla sitemize ekleyerek yine sayfalandırma ve geçişleri kolaylıkla WordPress kolayca sayfalandırma kod snippeti kullanarak sağlayabiliyoruz. Tabi ki yine temanızın functions.php dosyasından faydalanıyoruz.
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'
));
}
6. WordPress Yönetici Barını Gizleme
Herhangi bir rol ile siteye giriş yapıldığında eğer temanız tarafından engellenmiş değilse WordPress salt sistem yönetim barı yukarıda kullanıcıların erişimine açık durumdadır. Bu da ön planda kullanımdan ziyade, kullanıcıların arka plana erişimi demektir. Özellikle WordPress çekirdek izinleri düzenlenmediyse ve rol görevlerinde eksik bir durum varsa inanılmaz büyük bir risk oluşturabilir. Bu yüzden ne yaparsak yapalım, çok elzem lazım değilse WordPress admin bar gizleme işlemini unutmadan sitemizde uygulayalım.
/ Remove the admin bar from the front end
add_filter( 'show_admin_bar', '__return_false' );
7. RSS Besleme Kaynağında Yazı Kapak Görsellerini Gösterme
Eğer WordPress sitenizin veri akışını farklı platformlar ile RSS Beslemesi üzerinden paylaşıyorsanız, bu kod parçası sizlere fayda sağlayacaktır. Özellikle Google News gibi keşfet platformlarına sahip uygulamalarda yayın yaparken görsel sahibi olmak, ciddi oranda fark yaratır. Yine functions.php dosyasına erişerek kodlarımızı ekliyoruz.
// 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');
8. WordPress Yazar Link Yapısını Değiştirme
WordPress çekirdeğiyle birlikte gelen ve her temada çok yüksek ihtimalle barındırılan bir özellik daha sizlere açık sunabilir. Arama sonuçlarına müdahale ettiğimiz gibi yine salt bir link yapısına sahip olan “margarit.com.tr/author/yazarismi” link gösterimi, otomatik yazılan saldırı girişimlerinin ilgi odağıdır. Bu yüzden bu yapıyı kendimize göre düzenleyerek, içimizin rahat olmasını sağlayabiliriz. Standart olan “/author/yazarismi” kalıbını örnek olarak “margarit.com.tr/yazarlar/yazarismi” seklinde değiştirmek için aşağıdaki kodu temamızın functions.php sayfasına ekliyoruz.
add_action('init', 'cng_author_base');
function cng_author_base() {
global $wp_rewrite;
$author_slug = 'yazarlar'; // change slug name
$wp_rewrite->author_base = $author_slug;
}
9. Otomatik Twitter Kullanıcı İsimleri Etiketleme ve Tnaımlama
Eğer webstitenizde Twitter içeriklerini yoğun barındırıyor veya bu platformdan çok fazla sosyal dönüş alıyorsanız, bu kod parçası sitenizi renklendirebilir. @ karakter atamasıyla @margarit) birlikte yazılan herhangi bir etiketleme veya bahsetme işlemi, otomatik olarak Twitter üzerindeki hesap ismine bir bağlantıya dönüşerek kullanıcılar için güzel bir yönlendirme sağlayacaktır. Özelliği aktif etmek için functions.php dosyamıza eklemeler yapıyoruz.
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');