29
2013
Yazarlarınız Yayınlanmış Yazıyı Güncelleyip Yayınlayamasınlar
WordPress sitelerimizde birden fazla yazarın yazı yazmasını sağlamak mümkün. WordPress'in sunduğu kullanıcı profillerini kullanarak bunu yapabiliyoruz, bu profillerden bir kullanıcıyı Yazar olarak atadığımızda, bu kullanıcı bir yazıyı yazıp, yayınlayabiliyor. Bu yetkisini çeşitli eklentilerle kısıtlamak mümkün, yani yazarın yazıyı yayınlayamayıp, yazıyı İnceleme Bekliyor olarak kaydetmesini sağlamak mümkün. Ancak bir problem var o da yazarın yayınlanmış yazıyı güncelleyebilmesi.
Bunun ne sakıncası olabilir diye düşünebilirsiniz. Şöyle ki yazarın yazısını yayınladıktan sonra yazar yazısını güncelleyebilir ancak yeni güncel yazıda olumsuz ifadeler kullanmış ya da siteye zarar verebilecek içerik eklemiş olabilir. Bu durumda site sahibi olarak sizin bundan haberiniz dahi olmaz, çünkü yazı önceden yayınlandığı için siz farketmeden yazı yayınlanmaya devam eder. İşte tam bu noktada, yazarlar yayınlanan yazıları düzenlediklerinde yazı tekrar İnceleme Bekliyor durumuna dönüşse iyi olmaz mı?
Aşağıdaki kodlar tam da bu işlemi yapıyor. Ancak kodların işe yarayabilmesi için yazarların yazı yayınlama yetkisini bir eklenti ya da farklı bir yöntemle engellemiş olmanız gerekiyor. Kodları temanızın functions.php dosyasına uygun şekilde ekleyin, hepsi bu.
function yakuphoca_yazar_kontrol($post_id) { if ( wp_is_post_revision( $post_id ) ) return $post_id; if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; if (current_user_can('author')) { if ( get_post_status ( $post_id) == 'publish' ) { remove_action('save_post', 'yakuphoca_yazar_kontrol'); wp_update_post(array('ID' => $post_id, 'post_status' => 'pending')); add_action('save_post', 'yakuphoca_yazar_kontrol'); } } return $post_id; } add_action('save_post', 'yakuphoca_yazar_kontrol');
Bir daha hatırlatayım, yazarın yazı yayınlama yetkisini bir eklenti ya da başka bir yöntemle kısıtlamadıktan sonra yukarıdaki kodların bir etkisi olmaz. Eğer eklenti kullanmadan yazarın yazı yayınlama yetkisini kısıtlamak isterseniz de aşağıdaki kodları yukarıdaki kodun üstüne yapıştırın.
$edit_author = get_role('author'); $edit_author->remove_cap('publish_posts'); //Yazarın yazı yayınlama yetkisini kaldır $edit_author->remove_cap('delete_published_posts'); //Yazarın yayınlanan yazıyı silmesini engelle
Hocam fonksiyon için teşekkür ederim, ancak şöyle bir sorun var yazar yazıyı düzenledikten sonra yazı onaya düşüyor evet ama güncellenip onaya düşüyor. Yani yazı önce güncelleniyor ve sonra onaya düşüyor. Bu problemi nasıl aşabilirim ?
İyi de olması gereken zaten bu değil mi? O zaman sizin yazarların onaylanmış yazıları güncelleme yetkisini, silme yetkisini kaldırmanız gerekiyor. Eklenti kullanıyorsanız, http://www.yakuphoca.com/kullanicilarin-yetkileri-eklentisiz-nasil-kisitlanir/ adresindeki yetkilerle ilgili açıklamalarımı inceleyip, hangi yetkileri kaldırmanız gerektiğine karar verin.
Oradaki bilgileri incelediğinizde yazarların edit_published_posts ve delete_published_posts yetkilerini kaldırmanız durumunda, yazarlar yayınlanmış bir yazıya müdahale edemezler. Ne düzenleyebilirler ne de silebilirler.
Siz isteğinizde, yazar yazıyı güncellesin ama kaydedince onaya düşsün dediğiniz için ki doğal olan budur, aksi durumda zaten yazarınızın içerik sağlayıcıdan bir farkı kalmayacaktır, kodları ona göre hazırladım.
Anlatamadım hocam herhalde yazı normal sayfada da güncelleniyor yani güncellenen içerik sayfada ziyaretçi tarafından gözüküyor :)
İnceleme için Bekliyor durumundaki yazılar sitenin ana sayfasında normalde görüntülenmezler. Bilgisayarımda yaptığım kontrollerde, yazar yayınlanmış bir yazıyı güncellediğinde, yazı inceleme bekliyor durumuna düştü. Ana sayfadan kontrol ettiğimde yazı sayfadan kaldırılmıştı. Yazının adresine doğrudan girdiğinizde, eğer yönetici iseniz yazı görüntülenir ama çıkış yaptığınızda yani normal ziyaretçi gibi incelediğinizde yazı ulaşılamaz duruma gelmektedir.
Dolayısıyla bence sistem doğru bir şekilde çalışmakta. Sitenizdeki cache eklentileri falan mı acaba sorun yaratıyor?
Çözdüm hocam bende daha önceden yetki sınırlandırması yapmıştım bir grup üzerinde function.php dosyasında o fonksiyonla çakışıyorlardı düzenledim sağolun ilginiz için :)
Problemi çözdüğünüze sevindim.