WordPress Kendi Eklediği Ortamı Gösterme

Geçen gün wordpress ile bir ilan sitesi tasarlarken lazım oldu. Öncelikle siteye kullanıcılar içerik sağlayıcısı olarak üye olabileceklerdi. Kullanıcı rolleri gereği, içerik sağlayıcılar yazdıkları içeirklere ortam ekleyemezler. Öncelikle onlara ortam ekleme izni vermek lazımdı. Temanın functions.php dosyasına aşağıdaki kodları ekleyerek onların ortam eklemesine imkan sağladık.

//-->Üyelere Resim Yükleme İzni Ver 
    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');
    }  

Daha sonra da diğer kullanıcıların ekledikleri ortamları içerik yazdıkları özel sayfada göremesinler diyerek, sadece kendi ekledikleri ortamları göstermek için de aşağıdaki kodları kullandım.

//--> Kendi Eklediği Resmi Görsün Sadece
add_action('pre_get_posts','ortami_kes');

function ortami_kes( $wp_query_obj ) {
    global $current_user, $pagenow;
    if( !is_a( $current_user, 'WP_User') )
    return;
    if( 'admin-ajax.php' != $pagenow || $_REQUEST['action'] != 'query-attachments' )
    return;
    if( !current_user_can('manage_media_library') )
    $wp_query_obj->set('author', $current_user->ID );
    return;
}

Tabi wordpress yönetici paneline girdiğinde kullanıcı diğer eklenmiş resimleri görebiliyor.

WordPress Yorumları SQL İle Kontrol Etmek

wordpress-yorumlar-sqlMerhaba, wordpress yorum yönetimi bazen can sıkıcı bir hal alabiliyor. Spamlara karşı koruma almadıysanız hele bu durum daha da başa bela oluyor. Yada ne bileyim yorumlar ile ilgili topluca bir kontrol sağlamak istiyorsunuz. İşte bu konular ile ilgili sorunların çözümü için bir kaç SQL sorgusunu çalıştırmamız yeterli gelebilir.

Lütfen Dikkat

  • Bu işlemleri yapmadan önce lütfen veritabanınızı yedekleyiniz.
  • Bu işlemleri yapabilmeniz için wordpress kurulumu yaparken seçmiş olduğunuz tablo ön ekinin “wp_” olması lazımdır. Varsayılan olarak o gelir.

Tüm Spam Yorumları Silmek

WordPress kullanıcıların çoğu sıkıntısından birisi de spam olarak gelen yorumlardır. Özellikle son zamanlar yabancı spamcıların bile Türk sitelerine translate aracılığıyla yorum attığı da gözlenirken, spam yorumlardan nasıl kurtulunur bunu konuşalım.

Kimi zaman sitenize bir kaç gün bakamazsınız, döndüğünüzde panelinizde spam yorumlar o kadar çoğalmıştır ki, arada normal yorum var mı diye tek tek gezersiniz yorumlar arasında. Ancak spam yorumları silmenin çok basit bir yolu var. Nasıl mı?

Veritabanımızın yönetim paneline yani phpmyadmin’e giriyoruz. Sorgu çalıştırma mantığıyla aşağıdaki kodu çalıştırıyoruz.

DELETE from wp_comments WHERE comment_approved = 'spam'

İki Tarih Arasındaki Tüm Yorumlarını Silmek

Sitenize herhangi bir süre aralığında spam yorum saldırısı gelmiş olabilir. Bazen bu sayı 1000’leri bile geçer. Tek tek silmek can sıkıcıdır. O yüzden tek seferde iki tarih arasındaki tüm yorumları silebilirsiniz.

DELETE FROM wp_comments
WHERE comment_date > '2013-11-15 01:10:04'
AND comment_date <= '2013-11-20 00:10:04'

Onay Bekleyen Tüm Yorumları Silmek

Onay kuyruğunda olan yorumlar bazen spam olarak birikir, işte bu onay kuyruğunda bekleyen yorumları tek bir satırlık sorgu ile silebilirsiniz.

DELETE FROM wp_comments WHERE comment_approved = '0'

Aynı Anda Tüm Yazılarda Yorumları Devre Dışı Bırakmak

Tek tek yazılardaki yorumları devre dışı bırakmak mı? Yok artık, o kadar da değil diyerek tüm yazılarda yorumları devre dışı bırakabilirsiniz.

UPDATE wp_posts SET comment_status = 'closed', ping_status = 'closed' WHERE comment_status = 'open'

Eski Yazılarda Yorumları Devre Dışı Bırakma

Belirli bir tarihten önceki yazılarınızda artık yorumları devre dışı bırakmak mı istiyorsunuz. Buyrun buradan yakın.

UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2014-01-01' AND post_status = 'publish'

Website Bağlantısı İçeren Yorumları Silme

Yorumlarda yazar web site urlsi kullanılmış ve sizin içinde artık bu durum rahatsız edici olduysa, URL kullanılan tüm yorumları silebilirsiniz.

DELETE from wp_comments WHERE comment_author_url LIKE "%nastyspamurl%" ;

Yorumlardaki Bir Kelimeyi Değiştirmek

Yorumlara baktığınızda bir kelimenin yanlış olduğunu veya onun düzelmesi gerektiğini düşündünüz. Yapmanız gereken şey aşağıdaki sorguyu çalıştırmaktır. Tabiki de degisecek_kelime ile yeni_kelime yerlerini de değiştirerek..:)

UPDATE wp_comments SET `comment_content` = REPLACE (`comment_content`, 'degisecek_kelime', 'yeni_kelime')
<h2>Sadece Kayıtlı Kullanıcılara Yorumları Açmak</h2>
Sitenizde almış olduğunuz karar gereği sadece kayıtlı kullanıcıların yorum yapmasını istiyorsunuz. Tek tek kim uğraşacak bununla değil mi?

UPDATE wp_posts SET comment_status = 'registered_only'

Sanırım bunlar yeter de artar bile 🙂 Herhangi bir konuda destek almak için lütfen yorum yapmaktan çekinmeyiniz.

WordPress Popüler Yazılar (Özel Alana Göre)

Merhaba, baya oldu wordpress ile ilgili paylaşım yapmayalı, geçen günlerde bir video sitesi düzenlemesi işi geldiğinde lazım olmuştu. Arkadaş sidebar da popüler yazıları göstermek istediğini belirtti. Kullanılan eklenti olup olmadığına baktığımda WP-Postviews eklentisinin olduğunu gördüm. Bu eklenti bilinildiği üzere yazılarımızda views diye bir özel alan oluşturarak yazı görüntülenme sayısını tutuyor.

Popüler yazıları da bununla göstermek için mantık olarak özel alanı views olarak yazıları listeletmek uygundu.

Öncelikle temamızın functions.php dosyasına aşağıdaki kodlarımı ekliyoruz.

/* En Çok Görüntülenen Yazılar */
function wpb_set_post_views($postID) {
    $count_key = 'wpb_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
/* En Çok Görüntülenen Yazılar */

Daha sonra temamızda nereye yerleştirmek istiyorsak aşağıdaki kodları da yerleştirelim

<h2>En Çok Okunanlar</h2>
<?php $popularpost = new WP_Query( array( 
'posts_per_page' => 12, // Listelenecek Yazı
'meta_key' => 'views', 
'orderby' => 'meta_value_num', 
'order' => 'DESC'
) );
while ( $popularpost->have_posts() ) : $popularpost->the_post();
?>
<li>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?>(<?php if(function_exists('the_views')) { the_views(); } ?>)</a>
</li>
   
<?php endwhile; ?>

Bu şekilde sadece popüler yazılarımızı listeletmiş olduk. Tabi buna daha bir çok fonksiyon eklenebilir. Burada sadece yazı başlıkları çekilmektedir.

WordPress Admin Panel Fonksiyon Kodları #2

Daha önce bazı panel fonksiyon kodlarını paylaşmıştım sizlerle. Bugün de o konuya gelen bir yorum üzerine paylaşım yapıyorum. Biraz daha fazla bilgi vermek zarar getirmez.

Ekran Tercihlerinin Yanındaki Yardım Tabını Kaldırmak

Wordpress Admin Panel Yardım Tabını Kaldırmak
WordPress Admin Panel Yardım Tabını Kaldırmak

Temanızın functions.php dosyasına eklediğiniz taktirde ekran tercihlerinin yanında çıkan yardım tabını kaldırabilirsiniz.


add_action('admin_head', 'mytheme_remove_help_tabs');
 function mytheme_remove_help_tabs() {
 $screen = get_current_screen();
 $screen->remove_help_tabs();
 }

Tema Değiştirmeyi Engelleme

Bazı durumlarda istersiniz ki diğer Süper Adminler temayı değiştirmesin. Aşağıdaki kodu fonksiyon dosyasına ekleyin. Sadece 1 numaralı id sahibi kullanıcı temaları değiştirebilirken diğer süper adminler değişiklik yapamaz.


add_action('admin_init', 'slt_lock_theme');
 function slt_lock_theme() {
 global $submenu, $userdata;
 get_currentuserinfo();
 if ($userdata->ID != 1) { //1 Numaralı Kullanıcıya İzin Verdik
 unset($submenu['themes.php'][5]);
 unset($submenu['themes.php'][15]);
 }
 }

WordPress Mail Adresini Değiştirmek

Aşağıdaki kod yeterli şekilde işinizi görecektir.  Böylece artık siteniz üzerinden giden mesajlarda wordpress@siteniz.com muhabbeti kalmayacaktır.


// Mail Adresini Değiştir
 add_filter('wp_mail_from', 'new_mail_from');
 add_filter('wp_mail_from_name', 'new_mail_from_name');

function new_mail_from($old) {
 return 'mail@mail.com';
 }
 function new_mail_from_name($old) {
 return 'ibocan.net';
 }

Başlangıç Sayfasındaki Ögeleri Kaldırmak

Panele girdiğimizde karşımıza bir çok yapı çıkar. Bunlardan kimi zaman kurtulmak isteriz. İşte bunun için size güzel bir kaç kod.

 function remove_dashboard_widgets(){
 global$wp_meta_boxes;
 unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']); // Eklentiler
 unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']); // Son Yorumlar
 unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']); // Birincil
 unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']); // Sitenize Gelen Bağlantılar
 unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']); // Şu Anda
 unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']); // İkincil
 }
add_action('wp_dashboard_setup', 'remove_dashboard_widgets');

Yeni Yazı Ekle Sayfasına Bilgilendirme Mesajı Koymak

Sitenizde birde çok kullanıcı var ve içlerinde içerik sağlayıcı olmak isteyenlerde var. Bunlar için bilgilendirme alanı yapabiliriz hem de Yazı Ekleme sayfasına.

wordpress-yazi-ekle-bilgi-sayfasi
WordPress Yazı Ekleme Sayfası Bilgilendirme Alanı

// Yazı Ekle Bilgilendirme
 function wptutsplus_text_after_title( $post_type ) { ?>
 <div class="after-title-help postbox">
 <h3>Bilgilendirme</h3>
 <div class="inside">
 <p>Buraya istediğinizi yazın. Mesela yazılarınızı bu alanda yazacaksınız veya yazdıktan sonra sağ alandan kategori seçimini yapıp, gerekli olan anahtar kelimeleri ekleyin gibisinden. Hatta bir video bile gömebilirsiniz.</p>
 </div><!-- .inside -->
 </div><!-- .postbox -->
 <?php }
 add_action( 'edit_form_after_title', 'wptutsplus_text_after_title' );

WordPress Eklentisiz Seo

Bir çoğumuz sitemiz için WordPress’in Seo eklentilerinden faydalanırız. All In One Seo, Yoast Worpdress Seo gibi eklentiler bunların en başında gelmektedir hemde. Ancak artık bu durumu eklentisiz çözebiliriz. Hemde temamıza ekleyeceğimiz bir kaç kod ile.

Bu Kod Ne İşe Yarar

  • Açıklama: Giriş yaptıysanız özel bir açıklama girilir, eğer giriş yapmadıysanız da içeriğinizin ilk 155 kelimesini açıklama olarak çeker.
  • Başlık: Varsa özel başlık kullanılır, yoksa orjinal yazı başlığınız kullanılır.
  • Anahtar Kelimeler: Yazınıza eklediğiniz etiketler otomatik olarak “keywords” olarak eklenir. Bunun dışında eklentilerde yaptığımız gibi anahtar kelimeler de ekleyebiliriz. Bunlar sayfamızda gözükmez ancak, kaynakta görüntülenir.
  • Robots: Robotların sayfalarınızı indexlemesini veya indexlememesini, linkleri takip etmesini veya etmemesini ayarlayabilirsiniz. index/follow – noindex/follow yöntemi kısacası

SEO-wordpress

Nasıl Kullanacağım?

Öncelikle yapacağınız işlemlerden önce temanızın functions.php ve header.php dosyalarını yedekleyiniz. Normalde böyle bir şeye pek ihtiyaç olmayabilir de kimi insanlar direk kopyala yapıştır yaptığı için nereye ne eklediğini sonra bulamıyor veya kodları silerken onları bir kenara almıyor.

Neyse, temanızın functions.php dosyasını açın ve aşağıdaki kodları ekleyin. 4. satırdaki anahtar kelimeleri değiştirmeyi unutmayın ancak. Buradaki anahtar kelimeleriniz şu anda tüm sayfalarda çıkması için ayarlanmıştır.

/*  Worpdress Eklentisiz Seo
/* ------------------------------------ */
// ibocan.net  http://www.ibocan.net/wordpress-eklentisiz-seo
function basit_wp_seo() {
    global $page, $paged, $post;
    $default_keywords = 'ibrahim, yılmaz, wordpress, php, eklenti, tema, tarihçi, ibocan.net, ibocan, istanbul, wordpress eklentileri, wordpress kodları'; // değiştirmeyi unutma
    $output = '';
    $default_title = 'İbrahim Yılmaz Kişisel Web Sayfası';
    $default_desc = 'Tarihçi ve blog yazarı İbrahim Yılmaz\'ın hayata dair görüşleri';
    
    // Açıklama
    $seo_desc = get_post_meta($post->ID, 'aciklama', true);
    $description = get_bloginfo('description', 'display');
    $kategori = category_description();
    $pagedata = get_post($post->ID);
    if (is_singular()) {
        if (!empty($seo_desc)) {
            $content = $seo_desc;
        }   
        else if (!empty($pagedata)) {
            $content = apply_filters('the_excerpt_rss', $pagedata->post_content);
            $content = substr(trim(strip_tags($content)), 0, 155);
            $content = preg_replace('#\n#', ' ', $content);
            $content = preg_replace('#\s{2,}#', ' ', $content);
            $content = trim($content);
        }
    } 
    else if (is_category()) {
            if(!empty($kategori)) {
            $content = $kategori;
        }   
        else  {
            $content = $default_desc;
        }
    }
    else if (is_page()) {
            if(!empty($seo_desc)) {
            $content = $seo_desc;
        }   
        else  {
            $content = $default_desc;
        }
    }
    else {
        $content = $description;
    }
    if (is_home() || is_front_page()) $content = $default_desc;
    $output .= '<meta name="description" content="' . esc_attr($content) . '">' . "\n";

    // Anahtar Kelimeler
    $keys = get_post_meta($post->ID, 'etiket', true);
    $cats = get_the_category();
    $tags = get_the_tags();
    if (empty($keys)) {
        if (!empty($cats)) foreach($cats as $cat) $keys .= $cat->name . ', ';
        if (!empty($tags)) foreach($tags as $tag) $keys .= $tag->name . ', ';
    }
    if (is_home() || is_front_page()) $keys = $default_keywords;
    $output .= "\t\t" . '<meta name="keywords" content="' . esc_attr($keys) . '">' . "\n";

    // Robots
    if (is_archive() || is_author()) {
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        if ($paged > 1) {
            $output .=  "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n";
        } else {
            $output .=  "\t\t" . '<meta name="robots" content="index,follow">' . "\n";
        }
    } else if (is_home() || is_singular()) {
        $output .=  "\t\t" . '<meta name="robots" content="index,follow">' . "\n";
    } else {
        $output .= "\t\t" . '<meta name="robots" content="noindex,follow">' . "\n";
    }

    // Başlık
    $title_custom = get_post_meta($post->ID, 'baslik', true);
    $url = ltrim(esc_url($_SERVER['REQUEST_URI']), '/');
//  $name = get_bloginfo('name', 'display');
    $title = trim(wp_title('', false));
    $cat = single_cat_title('', false);
    $tag = single_tag_title('', false);
    $search = get_search_query();

    if (!empty($title_custom)) $title = $title_custom;
    if ($paged >= 2 || $page >= 2) $page_number = ' | ' . sprintf('Page %s', max($paged, $page));
    else $page_number = '';

    if (is_home() || is_front_page()) $seo_title = $default_title;
    elseif (is_singular())            $seo_title = $title/* . ' | ' . $name*/;
    elseif (is_tag())                 $seo_title = 'Etiket Arşivi: ' . $tag . ' | ' . $name;
    elseif (is_category())            $seo_title = 'Kategori Arşivi: ' . $cat . ' | ' . $name;
    elseif (is_archive())             $seo_title = 'Arşiv: ' . $title . ' | ' . $name;
    elseif (is_search())              $seo_title = 'Arama: ' . $search . ' | ' . $name;
    elseif (is_404())                 $seo_title = '404 - Bulunamadı: ' . $url . ' | ' . $name;
    else                              $seo_title = $name . ' | ' . $description;

    $output .= "\t\t" . '<title>' . esc_attr($seo_title . $page_number) . '</title>' . "\n";

    return $output;
}

Daha sonra header.php yi açıp <head> etiketinin altına aşağıdaki kodu ekleyin.

<?php echo basit_wp_seo(); ?>

Buraya kadar yapılan işlemler neticesinde sitemizde özel alan desteğiyle Seo için gerekli olan şeyleri oluşturduk. Artık herhangi bir içerik eklerken özel başlık, açıklama veya anahtar kelime eklemek için yapmanız gereken şey Özel Alan eklemesi yapmak.

Başlık için: ibo_seo_baslik
Açıklama için: ibo_seo_aciklama
Anahtar Kelime için: ibo_seo_etiket

Özel alanlarını kullanmanız yeterli olacaktır.

Neden Bunu Kullanmalıyım?

  1. Eklenti kullanılmadığı için sitenize ekstra bir yük yapmamaktadır.
  2. Kullanımı basittir, diğer eklentiler ile yaptığınızın aynısını yapabilmektesiniz.

Eklenti Kullanıyordum Nasıl Veri Kaybetmeden Bu İşi Yaparım?

Yazımın başında dediğim gibi bir çok Worpdress kullanıcısı eklenti kullanmaktadır. Bende bunların içerisinde Yoast Worpdress Seo eklentisini kullanıyorum. Bunun içinde veri kaybetmeden nasıl eklentisiz seo’ya geçiş yapabileceğimizi anlatacağım. Burası biraz daha bilmeyenler için zor gelebilir.

Bunun için veritabanı üzerinde çalışmalar yapacağız. Bu yüzden yapılacak çalışma öncesi veri tabanınızın yedeğini mutlaka alınız.

PhpMyAdmin’e girin be aşağıdaki sorguları sırası ile çalıştırın. Bu Örnek Yoast WordPress Seo içindir.


UPDATE `wp_postmeta` SET `meta_key` = 'ibo_seo_etiket' WHERE `meta_key` = '_yoast_wpseo_metakeywords'
UPDATE `wp_postmeta` SET `meta_key` = 'ibo_seo_baslik' WHERE `meta_key` = '_yoast_wpseo_title'
UPDATE `wp_postmeta` SET `meta_key` = 'ibo_seo_aciklama' WHERE `meta_key` = '_yoast_wpseo_metadesc'

Test edilmiş onaylanmıştır. Herkese kolay gelsin.