Kueri Kustom WordPress – Banyak Loop

Diterbitkan: 2021-01-29

Dalam kebanyakan kasus ketika membangun situs web dengan WordPress, tema yang Anda aktifkan secara default akan menampilkan halaman depan yang mencantumkan posting terbaru Anda kecuali Anda memilih untuk menampilkan halaman statis dari opsi admin di bawah Pengaturan > Membaca. Tetapi bagaimana jika Anda ingin menampilkan berbagai konten yang bukan halaman statis atau posting terbaru Anda? Untungnya ini dimungkinkan menggunakan WordPress Multiple Loops.

Mari kita lihat bagaimana ini bisa dicapai!

Gunakan Beberapa Loop di Beranda WordPress Anda

Sebelum kita memulai, perlu dicatat bahwa Anda harus melakukan modifikasi ini ke situs web Anda sendiri menggunakan tema anak karena kami akan mengedit file template tema Anda. Jika Anda tidak melakukan ini, Anda akan kehilangan semua modifikasi yang Anda buat saat Anda memperbarui tema di lain waktu. Anda dapat mengetahui lebih lanjut tentang tema anak di sini.

Apa pun tema yang Anda gunakan, file PHP yang sesuai untuk beranda akan menyertakan loop standar yang menampilkan beberapa Postingan (dalam kebanyakan kasus, ini akan menjadi posting yang baru saja diterbitkan). Dalam tema Twenty Twenty misalnya, Anda akan menemukan kode yang mengontrol ini di dalam file index.php di sekitar baris 79.

 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() ); } }

Dalam loop standar seperti ini, dua variabel global penting digunakan:

  • $wp_query yang merupakan objek kelas WP_Query dan menyimpan hasil kueri database WP
  • $post yang merupakan objek kelas WP_Post saat ini.

Pada potongan kode di atas, pertama-tama kita periksa apakah ada postingan untuk ditampilkan dengan fungsi global have_posts() dan, jika demikian, ulangi postingan ini di dalam loop while. Fungsi global the_post() adalah fungsi yang berulang melalui posting yang memberi tahu WordPress untuk pergi ke posting berikutnya.

Jika Anda ingin melihat fungsi dan kelas ini secara detail, Anda dapat menemukannya di wp-includes/class-wp-query.php .

Untuk tujuan contoh kami, kami mengaktifkan tema Twenty Twenty dan kemudian membuat 6 Posting di bawah kategori yang disebut "Kategori 1" dan 5 Posting Layanan di bawah kategori bernama "Layanan".

Untuk mempermudah, kami akan membuat kode loop sesederhana mungkin dengan hanya menampilkan daftar judul Postingan.

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

Ini berarti di beranda kami, kami akan melihat sesuatu seperti ini:

Memulai Menyesuaikan Output Beranda kami

Seperti yang kita lihat dari tangkapan layar di atas, jika kita mengunjungi 'halaman depan' kita, kita akan melihat 10 posting terbaru terlepas dari kategori yang telah ditetapkan untuk mereka.

Sekarang kita akan melanjutkan dengan membuat template beranda kustom kita sendiri di mana kita akan menyertakan output yang disesuaikan.

Untuk melakukan ini, buat file bernama custom-homepage.php dan simpan di folder tema Anda. Tambahkan kode berikut ke halaman ini:

 <?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();

Kemudian, buka Admin WordPress Anda dan buat halaman bernama 'My Homepage' dan pilih 'My custom homepage template' dari menu dropdown Template sebagai templatenya.

Kemudian untuk menjadikannya sebagai Beranda default, Anda harus memilihnya di menu Pengaturan (Pengaturan > Membaca > Halaman Statis).

Pada titik ini, jika Anda melihat Beranda Anda, Anda seharusnya hanya melihat judul halaman jika dilihat dari ujung depan situs web Anda.

Sekarang kita memiliki pengaturan ini, mari tambahkan beberapa pertanyaan ke template 'Templat beranda kustom saya'.

Menambahkan Kueri Kustom

Tujuan kami dalam contoh ini adalah untuk menampilkan beberapa posting terbaru kami dari semua kategori. Di bawah ini kami akan menampilkan posting dari jenis posting khusus yang disebut 'buku'. Jika Anda tidak tahu cara mengatur Jenis Posting Kustom maka checkout adalah artikel 'Buat Jenis Posting Kustom WordPress Secara Manual'. Menyertakan Jenis Posting Kustom tentu saja, sepenuhnya opsional. Jika Anda tidak ingin melakukan ini, lewati saja langkah-langkah di mana kami merujuk ke jenis Postingan ini.

Mari kita mulai dengan mengganti loop saat ini (ditemukan di index.php di sekitar baris 79) dengan yang ini:

 $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;

Loop ini berarti Beranda Anda sekarang akan menampilkan 8 posting terbaru Anda (seperti yang ditunjukkan di bawah):

Kemudian, jika Anda ingin menyertakan 'buku' jenis kiriman khusus (atau jenis kiriman khusus lainnya dalam hal ini), kami akan menambahkan loop kedua untuk kiriman buku tepat di bawah loop pertama seperti ini:

 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;

Buka ujung depan situs web Anda dan segarkan ke halaman untuk mengonfirmasi semuanya berfungsi seperti yang diharapkan.

Pecahkan Kueri Kustom di Bagian

Akan berguna untuk memecah kueri khusus menjadi beberapa bagian. Alasan untuk melakukan ini adalah jika Anda ingin 'mengganggu' kueri pertama dengan menampilkan postingan dari kategori atau tipe postingan lain sebelum melanjutkan loop awal. Ini berguna jika misalnya, Anda ingin menampilkan posting terbaru dari suatu kategori dan kemudian menampilkan konten lain sebelum akhirnya menyimpulkan dengan lebih banyak 'postingan terbaru' untuk menyelesaikan halaman.

Mari kita melompat ke ini. Untuk memulai, hapus isi file custom-homepage.php yang kita gunakan sebelumnya dan tambahkan kode di bawah ini.

 <?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();

Di loop pertama kami mengambil 3 posting dari kategori Layanan. Untuk melanjutkan posting kategori Layanan di loop ketiga sambil menghindari duplikat, kami mendefinisikan offset => 3 . Ini berarti kita akan melihat yang berikut:

Tentu saja Anda dapat mengubah nilai offset ke nomor yang Anda inginkan.

Tambahkan Posting Kustom ke Kueri Posting Terbaru

Bagaimana jika kita ingin memasukkan Postingan Buku di homepage postingan terbaru? Loop default tidak secara default menyertakan posting kustom. Inilah cara kami memperbaikinya.

Untuk bagian ini, kami akan mengatur pengaturan bacaan untuk beranda ke 'Postingan terbaru Anda'.

Rute yang harus diikuti di sini adalah penggunaan hook pre_get_posts . Hook ini diperkenalkan di wp-includes/class-wp-query.php dan digunakan untuk menyesuaikan objek $query dan Loop WordPress utama sesuai keinginan Anda. Ini dijalankan setelah objek variabel kueri dibuat, tetapi sebelum kueri aktual dijalankan.

Buka file functions.php tema aktif Anda dan masukkan potongan kode berikut di akhir:

 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' );

Apa yang dilakukan kode ini dalam kondisi if adalah untuk memastikan modifikasi diterapkan di beranda hanya saat kueri utama berjalan.

Jika sekarang Anda mengunjungi beranda Anda, Anda akan melihat bahwa dalam kiriman terbaru, kiriman 'buku' khusus juga disertakan.

Kesimpulan

Cukup banyak tanpa kecuali, apa pun yang perlu Anda capai dalam hal konten untuk beranda WordPress Anda adalah mungkin. Seperti yang telah kami tunjukkan di sini, menggunakan WordPress Multiple Loops adalah cara yang ampuh untuk menyesuaikan output yang muncul di Beranda Anda. Pendekatan kami di sini hanyalah salah satu dari banyak. WordPress menawarkan tingkat kontrol yang luar biasa atas output yang muncul di situs Anda. Bereksperimenlah dengan alat yang mereka sediakan untuk mencapai apa yang Anda inginkan!