Wordpress Kullanışlı Kod Parçacıkları - R10.net
  • 15-09-2020, 04:30:38
    #1
    Merhabalar,

    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österin

    Bu 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ın

    Sayfalama 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ın

    Yö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ştirin

    Wordpress'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 Ekleyin

    Aş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şturun

    Ziyaretç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 / Engelleyin

    Buradaki 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ın

    Birden 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.
    -. .- -... . .-.-. .- -... . .-.
  • 15-09-2020, 06:30:18
    #3
    Hocam ben wordpress siteme webp uzantılı resimler eklemek istiyorum ama hep hata veriyor. Napabilirim?
  • 15-09-2020, 06:37:51
    #4
    prowebci adlı üyeden alıntı
    Hocam ben wordpress siteme webp uzantılı resimler eklemek istiyorum ama hep hata veriyor. Napabilirim?
    11. maddedeki kod parçacığı işinize yarar hocam. funtions.php'ye şu şekilde ekleyerek kullanabilirsiniz:

    function izinli_dosya_turleri( $mimes ) {
    $mimes['webp'] = 'image/webp';
    return $mimes;
    }
    add_filter( 'upload_mimes', 'izinli_dosya_turleri' );
    -. .- -... . .-.-. .- -... . .-.
  • 15-09-2020, 06:55:06
    #5
    d3nnis adlı üyeden alıntı
    11. maddedeki kod parçacığı işinize yarar hocam. funtions.php'ye şu şekilde ekleyerek kullanabilirsiniz:

    function izinli_dosya_turleri( $mimes ) {
    $mimes['webp'] = 'image/webp';
    return $mimes;
    }
    add_filter( 'upload_mimes', 'izinli_dosya_turleri' );
    işe yaradı, teşekkür ederim.