WordPress Özel Sorguları – Çoklu Döngüler

Yayınlanan: 2021-01-29

Çoğu durumda, WordPress ile bir web sitesi oluştururken, etkinleştirdiğiniz tema, Ayarlar > Okuma altındaki yönetici seçeneklerinden statik bir sayfa görüntülemeyi seçmediğiniz sürece, varsayılan olarak son gönderilerinizi listeleyen bir ön sayfa görüntüler. Ancak, ne statik bir sayfa ne de en son gönderileriniz olmayan farklı bir içerik yelpazesi görüntülemek isterseniz? Neyse ki bu, WordPress Çoklu Döngüleri kullanılarak mümkündür.

Bunun nasıl başarılabileceğine bir bakalım!

WordPress Ana Sayfanızda Birden Çok Döngü Kullanın

Başlamadan önce, temanızın şablon dosyalarını düzenleyeceğimiz için bu değişiklikleri kendi web sitenizde bir alt tema kullanarak yapmanız gerektiğini belirtmekte fayda var. Bunu yapmazsanız, temanızı bir sonraki güncellemenizde yaptığınız değişiklikleri kaybedeceğinizi göreceksiniz. Çocuk temaları hakkında daha fazla bilgiyi burada bulabilirsiniz.

Kullandığınız tema ne olursa olsun, ana sayfa için karşılık gelen PHP dosyası, bazı Gönderileri görüntüleyen standart bir döngü içerecektir (çoğu durumda bu, yakın zamanda yayınlanan gönderilerdir). Örneğin Twenty Twenty temasında, bunu kontrol eden kodu 79. satır civarında index.php dosyasında bulacaksınız.

 if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; if ( $i > 1 ) { echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />'; } the_post(); get_template_part( 'template-parts/content', get_post_type() ); } }

Bunun gibi standart bir döngüde iki önemli global değişken kullanılır:

  • Bir WP_Query sınıfı nesnesi olan ve bir WP veritabanı sorgu sonucunu tutan $wp_query
  • Geçerli WP_Post sınıfı nesnesi olan $post .

Yukarıdaki kod parçasında, önce have_posts() global işleviyle gösterilecek herhangi bir gönderi olup olmadığını kontrol ediyoruz ve eğer öyleyse, bir while döngüsü içinde bu gönderileri yineliyoruz. the_post() global işlevi, WordPress'e bir sonraki gönderiye gitmesini söyleyen gönderiler arasında yinelenen işlevdir.

Bu fonksiyonları ve sınıfları detaylı olarak görmek isterseniz wp-includes/class-wp-query.php dosyasında bulabilirsiniz.

Örneğimiz için Twenty Twenty temasını aktif hale getirdik ve ardından “Kategori 1” kategorisi altında 6 Mesaj ve “Hizmetler” kategorisi altında 5 Servis Mesajı oluşturduk.

İşleri kolaylaştırmak için, yalnızca Gönderi başlıklarının bir listesini görüntüleyerek döngü kodunu olabildiğince basit tutacağız.

 if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h3 class="entry-title">', '</h3>' ); } }

Bu, ana sayfamızda şöyle bir şey göreceğimiz anlamına gelir:

Ana Sayfa Çıktımızı Özelleştirmeye Başlarken

Yukarıdaki ekran görüntüsünden gördüğümüz gibi, 'ön sayfamızı' ziyaret edersek, kendilerine atanmış kategorilerden bağımsız olarak en son 10 gönderiyi göreceğiz.

Şimdi, özelleştirilmiş çıktıları dahil edeceğimiz kendi özel ana sayfa şablonumuzu oluşturmaya devam edeceğiz.

Bunu yapmak için custom-homepage.php adlı bir dosya oluşturun ve onu temanızın klasörüne kaydedin. Bu sayfaya aşağıdaki kodu ekleyin:

 <?php /* * Template Name: My custom homepage template */ get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h4 class="example"></h4>' ); } } get_footer();

Ardından, WordPress Yöneticinize gidin ve 'Ana Sayfam' adlı bir sayfa oluşturun ve şablon olarak Şablon açılır menüsünden 'Özel ana sayfa şablonum'u seçin.

Ardından, bunu varsayılan Ana Sayfa yapmak için Ayarlar menüsünde bunu seçmeniz gerekir (Ayarlar > Okuma > Statik Bir Sayfa).

Bu noktada, Ana Sayfanıza bir göz atarsanız, web sitenizin ön ucundan bakıldığında yalnızca sayfa başlığını görmelisiniz.

Şimdi bu kurulumu yaptık, 'Özel ana sayfa şablonum' şablonumuza bazı sorgular ekleyelim.

Özel Sorgular Ekleme

Bu örnekteki amacımız, tüm kategorilerdeki en son gönderilerimizden bazılarını görüntülemek olacaktır. Bunun altında, 'kitaplar' adı verilen özel bir gönderi türünden gönderileri görüntüleyeceğiz. Özel Gönderi Türlerini nasıl kuracağınızı bilmiyorsanız, ödeme 'Manuel Olarak WordPress Özel Gönderi Türleri Oluşturun' makalesidir. Bir Özel Gönderi Türü dahil etmek elbette tamamen isteğe bağlıdır. Bunu yapmak istemiyorsanız, bu Gönderi türüne atıfta bulunduğumuz adımları atlayın.

Şu anki döngüyü ( index.php içinde 79. satır civarında bulunur) bununla değiştirerek başlayalım:

 $args = array( 'posts_per_page' => 8, 'orderby', 'date', 'order', 'DESC' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Bu döngü, Ana Sayfanızın artık en son 8 gönderinizi görüntüleyeceği anlamına gelir (aşağıda gösterildiği gibi):

Ardından, 'kitaplar' özel gönderi türünü (veya bu konuyla ilgili başka herhangi bir özel gönderi türünü) eklemek istiyorsanız, kitap gönderileri için ilk döngünün hemen altına aşağıdaki gibi ikinci bir döngü ekleyeceğiz:

 echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', 'posts_per_page' => 8 ); $query = new WP_Query( $args ); while ($query->have_posts()) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Web sitenizin ön ucuna gidin ve her şeyin beklendiği gibi çalıştığını onaylamak için sayfayı yenileyin.

Özel Sorguyu Parçalara Ayırın

Özel bir sorguyu parçalara ayırmak faydalı olabilir. Bunu yapmanın bir nedeni, ilk döngüye devam etmeden önce başka bir kategoriden veya gönderi türünden gönderileri göstererek ilk sorguyu 'kesmek' istemeniz olabilir. Bu, örneğin, bir kategorideki en son gönderileri göstermek ve ardından sayfayı bitirmek için daha fazla 'en yeni gönderiler' ile tamamlamadan önce diğer içeriği göstermek istiyorsanız kullanışlıdır.

Hadi buna geçelim. Başlamak için, daha önce kullandığımız custom-homepage.php dosyasının içeriğini silin ve aşağıdaki kodu ekleyin.

 <?php /* * Template Name: My custom homepage template */ get_header(); //////////// // Services Posts loop echo '<h4>Services</h4>'; $args = array( 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Books Posts in between echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', ); $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Resume Services Posts loop echo '<h4>More Services</h4>'; $args = array( 'offset' => '3', 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; //////////// get_footer();

İlk döngüde Hizmetler kategorisinden 3 gönderi alıyoruz. Hizmetler kategorisi gönderilerini üçüncü döngüde yinelemelerden kaçınırken devam ettirmek için bir offset => 3 tanımlıyoruz. Bu, aşağıdakileri göreceğimiz anlamına gelir:

Elbette ofset değerini istediğiniz herhangi bir sayıya değiştirebilirsiniz.

Son Gönderiler Sorgusuna Özel Gönderiler Ekle

Kitap Gönderilerini ana sayfadaki en son gönderilere dahil etmek istersek ne olur? Varsayılan döngü, varsayılan olarak özel gönderileri içermez. İşte bunu nasıl düzeltebiliriz.

Bu bölüm için ana sayfanın okuma ayarlarını 'En son gönderileriniz' olarak ayarlayacağız.

Burada izlenecek yol, pre_get_posts kancasının kullanılmasıdır. Bu kanca wp-includes/class-wp-query.php dosyasında tanıtılmıştır ve $query nesnesini ve ana WordPress Döngüsünü uygun gördüğünüz şekilde özelleştirmek için kullanılır. Sorgu değişkeni nesnesi oluşturulduktan sonra, ancak gerçek sorgu çalıştırılmadan önce yürütülür.

Aktif temanızın functions.php dosyasını açın ve sonuna aşağıdaki kod parçasını ekleyin:

 function homepage_add_cpt( $query ) { if ( $query->is_main_query() && is_home() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } add_action( 'pre_get_posts', 'homepage_add_cpt' );

Bu kodun if koşulunda yaptığı şey, değişikliklerin ana sayfada yalnızca ana sorgu çalışırken uygulandığından emin olmaktır.

Şimdi ana sayfanızı ziyaret ederseniz, son gönderilerde özel 'kitap' gönderilerinin de dahil edildiğini fark edeceksiniz.

Çözüm

İstisnasız olarak, WordPress ana sayfanız için içerik açısından elde etmeniz gereken her şey mümkündür. Burada gösterdiğimiz gibi, WordPress Çoklu Döngüleri kullanmak, Ana Sayfanızda görünen çıktıyı özelleştirmenin güçlü bir yoludur. Buradaki yaklaşımımız pek çoğundan sadece biri. WordPress, sitenizde görünen çıktı üzerinde inanılmaz düzeyde kontrol sunar. İstediğinizi elde etmek için sağladıkları araçları deneyin!