WordPress Yönetici Listesi Tabloları: Özel Filtreler Ekleyin

Yayınlanan: 2021-02-26

WordPress Admin'deki sayfalarınız ve gönderileriniz hakkındaki çoğu bilgi tablolar halinde düzenlenir. WordPress kullanan herkes bunlara aşina olacaktır. İyi çalışırlar ve belirli sayfa veya gönderi bilgileri üzerinde 'Hızlı Düzenlemeler' yapmanıza, size gönderinin veya sayfanın yayınlandığı tarihi ve daha fazlasını göstermenize izin verirler. Ek olarak, bu tabloları, her tablonun üstünde görünen çeşitli açılır menülerle filtreleyebileceğinizi fark etmiş olabilirsiniz.

Ancak sadece bir avuç filtre var. Peki, Yönetici'de filtre kutusu olmayan bir değeri filtrelemek isterseniz ne yaparsınız? Neyse ki WordPress kendi filtrelerimizi eklememize izin veriyor. Nasıl olduğunu göreceğiz.

Neden Özel Filtreler Kullanılır ?

Peki, WordPress'te Yönetici tablolarını düzenlemek için tam olarak neden herhangi bir özel filtreye ihtiyacınız var? Çok sayıda gönderi Yazarı ve çok sayıda gönderisi olan bir sitemiz olduğunu düşünelim.

Pressidium ile web sitenizi barındırın

60 GÜN PARA GERİ GARANTİSİ

PLANLARIMIZI GÖRÜN

Gönderi yazarını herhangi bir değişiklik yapmadan Yönetici tablosundan görüntüleyebilirsiniz. Şu anda yapamadığınız şey, Gönderileri Yazara göre sıralamak. Belli bir yazar tarafından yazılan tüm Gönderileri kolayca görebilmek istiyorsanız, bu açıkça önemli bir sınırlamadır. Tüm Gönderi yazarlarının bir açılır menüsünü görüntüleyebilmeniz ve ardından listeden birini seçebilmeniz yardımcı olacaktır. Bu gerçekten işleri hızlandırabilir.

Bunu nasıl inşa edebileceğimize bir göz atalım.

Özel Filtremizi Oluşturma

Kendi filtrelerinizi oluşturmanıza yardımcı olmak için WordPress, restrict_manage_posts ve pre_get_posts kancalarını sağlar.

restrict_manage_posts , wp-admin/includes/class-wp-posts-list-table.php dosyasında 557. satır civarında tanıtılır ve yönetici tablosu listesinin üzerinde Filtre düğmesi oluşturulmadan önce etkinleşir.

Özel bir işlev kullanacağız ve onu her zamanki gibi restrict_manage_posts kancasıyla bağlayacağız (bununla ilgili daha fazla bilgi için buraya bakın). Aktif temanızın ana klasörüne gidin ve favori editörünüzle functions.php dosyasını açın. Dosya içeriğinin sonuna aşağıdaki kodu ekleyin:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

Kullandığımız ana koşul if( $screen->id == 'edit-post') . Burada, üzerinde bulunduğumuz ekran kimliğini döndüren get_current_screen() WordPress işlevini kullandık.

Bu örnekte yönetici ekran kimliği 'düzenle-gönder' şeklindedir. Yani gönderilerin yönetim ekranında olduğumuzdan emin oluyoruz. Örneğin, bunu sayfaların yönetici ekranına uygulamak isteseydik if( $screen->id == 'edit-page' kullanmalıyız veya özel bir gönderi türü için çalışıyor olsaydık, edit-{post_type} olurdu doğru if ifadesi.

Not: Her yönetici ekranına hangi kimliğin karşılık geldiğini görmek için yönetici ekranı referansıyla ilgili resmi belgelere göz atabilirsiniz.

Aşağıdaki kodda bir yazarın önceden seçili olup olmadığını kontrol ediyoruz ve eğer öyleyse seçilen değeri uyguluyoruz:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Son olarak wp_dropdown_users WordPress fonksiyonunu kullanarak daha önce tanımladığımız argümanlara göre yazarların açılır listesini oluşturacağız.

Sonra show_option_all argümanında 'hepsini göster' seçeneğini gösterecek metni seçtik. “Tüm yazarlar” dizisini seçtik. 'Ad' argümanında, açılır liste için istenen adı doldururuz. Bu değeri daha sonra gönderi listesi sonuçlarını filtrelemek için kullanacağız.

'Kim' argümanında, bizim durumumuzda 'yazarlar' olan hangi tür kullanıcıların sorgulanacağını tanımlarız. 'include_selected' argümanıyla, seçilen kullanıcı kimliğini açılır listeye dahil etmek isteyip istemediğimizi seçeriz.

Bu noktada, yönetici gönderileri ekranını yenilerseniz, diğer yerleşik filtre menülerinin yanında yazar açılır menüsünü görmelisiniz.

Bir değer seçer ve "Filtrele" tuşuna basarsanız, sayfa yeniden yüklendiğinde değer seçili kalır, ancak sonuçlar değişmeden kalır. Bir sonraki adımda, gönderi listesini sadece seçtiğimiz yazara bağlı gönderileri gösterecek şekilde filtrelemek için gerekli değişiklikleri yapacağız.

Sonuçları Filtreleme

Bir kez daha, pre_get_posts filtresi işi yapacak. Bu kancayı WordPress Yönetici Araması: Sonuçları Genişletme makalemizde inceledik. Gerçek sorgu çalıştırılmadan önce, yönetici sonrası ekranında oluşturulan sorgu değişkeni nesnesini değiştirmek için bunu tekrar kullanacağız. functions.php dosyanıza aşağıdaki satırları ekleyin:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

Ana koşul, daha önce olduğu gibi, admin gönderileri ekranında olmamız için burada da gereklidir.

$author_id = sanitize_text_field($_GET['authors_admin_filter']); seçilen yazar kimliğini $author_id değişkeninde tutar. Bundan sonra yazar kimliği 0 değilse(Tüm Yazarlar seçiliyse) sorgunun yazar parametresine $author_id değerini geçiyoruz.

Ve bu kadar. Artık gösterilen gönderiler yalnızca seçilen yazar/kullanıcı kimliğine ait olanlar olacaktır.

Çözüm

Yönetici ekranlarındaki özel filtreleme, içeriğinizin Yönetici kullanıcılar tarafından kolayca aranabilmesini sağlayabilir; bu, çok sayıda yayınınız veya sayfanız olduğunda paha biçilmez bir şey olabilir. Ve elbette bu, Yönetici tablolarında bir filtre kullanmanın olası yollarından yalnızca biridir. Yararlı bulabileceğiniz bir sürü alternatif yol var ve umarım burada özetlediğimiz teknikler kendi filtrelerinizi oluşturmanıza yardımcı olur.

Örneğin, son 30 gün içinde oluşturulan gönderileri gösterme seçeneklerine sahip bir açılır filtre menüsü veya belki de gönderileri herhangi bir sınıflandırmaya göre sıralayan bir filtre oluşturmak isteyebilirsiniz. Query_vars listesi, olası seçenekler üzerinde beyin fırtınası yapmanıza yardımcı olabilir!.

Bu harika özellikle oyun oynarken iyi eğlenceler!

Ayrıca bakınız

WordPress Yönetici Listesi Tabloları: Özel Filtreler Ekleyin
WordPress Özel Alanlarına Başlarken