WP_Query WordPress: Cara Menggunakan + Contoh Kodenya

Secara default, WordPress otomatis mengurutkan postingan dari yang terbaru ke yang paling lama. Namun, terkadang pengunjung tetap kesulitan untuk mencari postingan tertentu, bahkan saat sudah menggunakan kategori dan tag. Tenang, WP_Query WordPress bisa menjadi solusinya.

Dengan WP Query, Anda bisa mengubah tampilan postingan dan halaman di website Anda agar disesuaikan untuk setiap pengunjung. PHP class ini memungkinkan Anda menyederhanakan permintaan database yang rumit. Anda pun bisa menyesuaikan halaman tanpa batasan tema default.

Nah, artikel kami kali ini akan menjelaskan apa itu WP_Query serta cara menggunakannya di website WordPress Anda. Kami juga akan menyertakan beberapa contoh penerapannya untuk blog Anda. Jadi, terus simak artikel ini ya!

Apa Itu WP_Query?

Di WordPress, data website Anda disimpan di dalam database MySQL. Data ini meliputi semua hal yang ada, mulai dari postingan, halaman, komentar, sampai pengaturan konfigurasi.

Saat pengunjung mengklik sesuatu di website Anda, akan ada permintaan yang dikirim ke database WordPress Anda. Database lalu mengambil postingan dan halaman tertentu sesuai kueri tersebut. Kemudian, postingan dan halaman yang diminta pun akan ditampilkan.

Sebagai pemilik website, Anda bisa memanfaatkan query untuk mengambil informasi tertentu dari database. Anda memang bisa membuat SQL query, tapi sayangnya cara ini kurang efektif untuk mengambil data. Nah, di sinilah fungsi WP_Query.

WP_Query adalah PHP class yang bisa digunakan untuk membangun query dalam database. Di WordPress, class ini sudah disertakan secara default dan berjalan ketika ada pengunjung yang melakukan pencarian dalam daftar konten Anda.

Contoh hasil pencarian WordPress hosting

Dengan menerapkan query WordPress kustom, Anda bisa membantu pengunjung menemukan konten tertentu tanpa harus mencarinya. Kalau ingin merender beberapa postingan tertentu di bagian depan website, Anda bisa melakukannya dengan menggunakan custom post type WP_Query.

Misalnya, Anda ingin membuat custom post type WordPress. Untuk menampilkan postingan ini, Anda bisa menulis query tertentu. Berikut adalah struktur kode dasar yang bisa Anda gunakan:

// WP QUERY
$query = new WP_Query([
'post_type' => 'press-release'
"posts_per_page => 25,
'category_name' => 'health',
]);

Kode ini berjalan dengan menyesuaikan Loop. Pada dasarnya, Loop adalah kode PHP yang digunakan WordPress untuk menampilkan postingan tertentu. WordPress bisa memproses dan memformat setiap postingan berdasarkan kriteria tertentu dalam custom post type WP_Query.

WP_Query juga berguna bagi para developer. Dengan WP_Query, developer bisa mengutak-atik tema WordPress menggunakan PHP class ini tanpa harus membuat query secara langsung ke database.

Cara Menggunakan WP_Query WordPress

Setelah memahami apa itu WP_Query, kami akan memandu Anda membuat query dengan fungsi ini. Cara ini memungkinkan Anda menyesuaikan tampilan website dengan cepat dan mudah.

1. Buat Loop

Pertama, Anda perlu memahami cara kerja WordPress Loop lebih dulu. Loop berfungsi untuk mengekstrak data postingan dari database. Kode ini menentukan bagaimana konten ditampilkan sesuai dengan file template tema Anda.

Berdasarkan parameter yang Anda tetapkan, berikut adalah hal-hal yang bisa ditampilkan Loop:

  • Konten dari custom post type dan custom field WordPress.
  • Judul postingan dan cuplikan pada homepage Anda.
  • Konten dan komentar dari satu postingan.
  • Konten tiap halaman menggunakan tag template.

Sebelum memodifikasi Loop dengan WP_Query, pahami struktur Loop dulu. Di bawah ini adalah contoh basic loop:

<?php
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        // Display post content
    endwhile;
endif;
?>

Kami akan menjelaskan bagian-bagian loop di atas.

Pertama, fungsi have_posts() akan mengecek apakah website Anda memiliki postingan. Kalau ada, kondisi while akan melanjutkan loop untuk setiap postingan yang ada. Pada dasarnya, kode ini memberi tahu database untuk menampilkan postingan apa pun yang ada di website Anda.

Namun, Anda mungkin tidak ingin menampilkan semua postingan tersebut. Dengan memasukkan kode WP_Query ke dalam Loop, Anda bisa meminta WordPress untuk merender beberapa postingan saja:

?php
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

Kode ini memuat struktur basic Loop yang sama seperti pernyataan if atau while. Namun, ada tambahan string WP_Query di sana.

Anda bisa mengedit Loop agar hanya menampilkan postingan yang terkait dengan taksonomi WordPress, kategori, atau penulis tertentu berdasarkan parameter yang ditetapkan. Anda juga bisa mempersempit hasilnya berdasarkan tanggal, tag, custom field, dan lain sebagainya.

Dengan kata lain, ada berbagai cara yang bisa Anda lakukan untuk memodifikasi Loop dengan WP_Query.

2. Gunakan Argument

Saat Anda mengatur struktur WP_Query, ada empat elemen dasar yang perlu disertakan:

  • Argumen query
  • Query itu sendiri
  • Loop
  • Post data reset

Salah satu bagian terpenting pada query Anda adalah argumen (WP_Query args). Argumen memberi tahu WordPress tentang data apa saja yang ingin Anda ambil dari database. Fungsinya yaitu untuk menerapkan syarat (condition) tertentu pada Loop sehingga hanya postingan tertentu saja yang ditampilkan, bukan semuanya.

Pada contoh tadi, Anda mungkin melihat ada baris dengan kode ($args). Nah, di situlah tempat untuk menyisipkan argumen query.

Untuk menyusun struktur argumen WP_Query, Anda perlu menempatkan parameter tertentu dalam array. Kode dasarnya akan terlihat seperti ini:

$args = array(
    'parameter1' => 'value',
    'parameter2' => 'value',
    'parameter3' => 'value'
);

Misalnya, Anda ingin menampilkan postingan yang diberi tag ‘cooking‘. Kodenya akan seperti ini:

$query = new WP_Query( array( 'tag' => 'cooking' ) );

Kalau Anda tidak menyertakan argumen WP_Query, tidak akan ada konten yang diambil dari database. Jadi, tanpa informasi ini, WordPress tidak akan tahu postingan mana yang harus ditampilkan.

3. Tetapkan Parameter

Anda perlu menetapkan parameter untuk memodifikasi WP_Query. Dengan menentukan informasi ini, Anda bisa mengatur WordPress agar mengambil sejumlah postingan tertentu dari database.

Kalau belum tahu parameter mana yang harus disertakan dalam argumen, WordPress menyediakan beberapa contohnya untuk berbagai penggunaan. Contoh ini sudah siap pakai, sehingga Anda bisa langsung memanfaatkannya saat membuat WP_Query.

Ini beberapa parameter umum yang bisa Anda gunakan:

  • Posts_per_page – menentukan jumlah postingan yang ingin Anda tampilkan.
  • Author – memfokuskan hasil untuk satu author/penulis atau lebih.
  • Cat – menentukan category/kategori postingan dalam hasil.
  • Tag – mengambil postingan dengan tag tertentu.
  • Orderby – mengurutkan hasil berdasarkan author, post type, tanggal, dan lain-lain.
  • Order – mengurutkan hasil, baik urutan naik atau turun.
  • Post_type – menentukan apakah query mengambil postingan, halaman, atau custom post type.
  • Post_status – menentukan apakah postingan masih dalam proses pembuatan, terjadwal, diterbitkan, atau dihapus.

Contohnya, Anda ingin menampilkan postingan dari kategori tertentu. Dalam hal ini, Anda bisa menyertakan nama kategori dan slugnya:

$query = new WP_Query( array( 'category_name' => 'staff' ) );

Kode ini akan mengambil postingan yang memiliki kategori ‘staff’ pada WP_Query tersebut beserta subkategorinya.

Dengan parameter lain, Anda juga bisa menampilkan postingan dari tanggal tertentu. Untuk menampilkan konten pada hari kerja pukul 09.00 hingga 17.00, Anda bisa menggunakan parameter seperti ini:

$args = array(
    'date_query' => array(
        array(
            'hour'  	=> 9,
            'compare'   => '>=',
        ),
        array(
            'hour'  	=> 17,
            'compare'   => '<=',
        ),
        array(
            'dayofweek' => array( 2, 6 ),
            'compare'   => 'BETWEEN',
        ),
    ),
    'posts_per_page' => -1,
);
$query = new WP_Query( $args );

Jumlah parameter yang bisa Anda gunakan tidak terbatas. Dengan menyertakan syarat khusus seperti ini dalam argumen, Anda bisa menggunakan WP_Query untuk menyajikan data yang tepat.

4. Ubah Properti Class dengan Method

Karena WP_Query adalah PHP class, maka kode ini memuat konstanta yang disebut property atau properti. Property merupakan variabel untuk PHP class.

Para developer WordPress tidak menyarankan perubahan pada WP_Query properties secara langsung. Namun, Anda masih bisa berinteraksi dengannya menggunakan method.

Cara kerja method mirip dengan fungsi. Dengan memodifikasi method pada WP_Query, Anda bisa menentukan data yang diambil.

Dalam dokumentasi WP_Query, tersedia banyak fungsi untuk tugas sederhana. Misalnya, fungsi reset_postdata() bisa disertakan sebagai langkah penting dalam proses penulisan WP_Query. Method ini akan mereset property untuk $current_post dan $post.

Kodenya akan menjadi seperti ini:

<?php
// the query
$the_query = new WP_Query( $args ); ?>
 
<?php if ( $the_query->have_posts() ) : ?>
 
    <!-- pagination here -->
 
    <!-- the loop -->
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>
    <!-- end of the loop -->
 
    <!-- pagination here -->
 
    <?php wp_reset_postdata(); ?>
 
<?php else : ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

Pada dasarnya, Anda memang harus menggunakan method ini kalau menggunakan fungsi the_post() dalam query. Langkah ini akan memastikan bahwa tag template menggunakan postingan terkini dari query utama.

Beberapa method lain yang bisa Anda pakai untuk memodifikasi properti WP_Query adalah:

  • get_posts – mengambil post array berdasarkan variabel yang ditentukan.
  • have_posts – menentukan apakah postingan tersedia dalam Loop.
  • generate_postdata – menampilkan postingan.
  • fill_query_vars – melengkapi variabel query yang tidak tercantum dalam parameter.

Berdasarkan informasi yang Anda tentukan, Anda bisa memodifikasi WP_Query agar menjalankan fungsi yang dibutuhkan. Cara ini pun bisa menjadi alternatif yang lebih fleksibel dan aman untuk memodifikasi class property.

Contoh WP_Query

Setelah memahami konsep dasar WP_Query WordPress, Anda bisa mulai menggunakannya untuk memodifikasi desain website Anda. Dengan banyaknya parameter yang tersedia, Anda pun bisa melakukan beragam penyesuaian sesuai kebutuhan.

Di bawah ini adalah beberapa contoh WP_Query yang bisa Anda jadikan inspirasi untuk meningkatkan pengalaman website Anda.

1. Postingan Terbaru dalam Kategori Tertentu

Pengunjung biasanya paling tertarik dengan konten yang fresh. Namun, terkadang mereka akan langsung menutup website Anda setelah membaca sebuah postingan. Nah, Anda bisa menarik mereka agar tidak langsung pergi dengan menyajikan postingan terkait atau “Related Post”.

Dengannya, Anda juga bisa mengarahkan pengunjung ke konten lain yang mungkin mereka suka.

Ada beberapa cara untuk menambahkan related post di WordPress, dan WP_Query bisa memaksimalkannya terutama di website yang postingannya berkaitan dengan waktu, seperti website berita.

Sebagai contoh, ada pengunjung yang membaca artikel ilmiah tentang penurunan daya ingat di website Anda. Menggunakan WP_Query, Anda bisa menampilkan topik serupa dari hasil penelitian yang lebih terkini:

Contoh penggunaan WP_Query

Untuk mengambil sejumlah postingan terbaru dari kategori tertentu, gunakan kode WP_Query berikut:

<?php
 
// Get the current post id.
$current_post_id = get_the_ID();
 
// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;
 
// Setup arguments.
$args = array(
    // Get category's posts.
    'cat' => $current_post_first_cat_id,
    // Exclude current post.
    'post__not_in' => array( $current_post_id )
);
 
// Instantiate new query instance.
$my_query = new WP_Query( $args );
 
?>

Setelah mengaplikasikan query ini menggunakan informasi website Anda, postingan yang berkaitan dengan topik yang baru saja dibaca pengunjung pun akan ditampilkan. Ini bisa menjadi cara yang efektif untuk mengarahkan pengunjung ke informasi terkait lainnya tanpa harus mencari.

2. Postingan yang Diterbitkan Minggu Ini

Apabila Anda punya pembaca setia, mereka pasti ingin langsung membaca artikel terbaru Anda setelah diterbitkan. Manfaatkan peluang ini dengan mendesain website Anda agar menampilkan postingan terbaru guna menyajikan informasi yang paling up-to-date.

Khususnya kalau punya website berita, Anda wajib memformat postingan dalam urutan yang paling baru ke yang paling lama. Dengan begini, pembaca bisa segera menemukan konten berita terbaru.

Contoh penggunaan WP_Query berdasarkan waktu

Anda bisa menggunakan WP_Query untuk menetapkan parameter berdasarkan tanggal artikel. Ambil postingan yang diterbitkan di minggu-minggu terakhir agar pengunjung tidak membaca artikel lama yang sudah tidak relevan.

<?php  
   $arguments = array(
      "date_query" => array(
         array(
           "year" => date( "Y" ),
           "week" => date( "W" ),
         )
      )
   );
   $posts = new WP_Query($arguments);
?>

Dengan memodifikasi parameter date_query, Anda bisa memilih postingan yang terbit baru-baru ini. Meskipun bisa juga menyertakan nilai Anda sendiri, kami merekomendasikan rentang waktu minggu terakhir karena akan lebih efektif.

3. Postingan Terpopuler Berdasarkan Jumlah Komentar

Anda bisa menampilkan postingan terpopuler yang selama ini menerima paling banyak engagement. Dengan menunjukkan postingan ini, Anda bisa mendorong pengunjung untuk turut membuka dan membacanya.

Sayangnya WordPress tidak memiliki fitur untuk menghitung jumlah baca postingan, sehingga Anda harus menambahkannya sendiri. Anda bisa menggunakan plugin, tapi tool ini bisa memperlambat website Anda.

Dengan WP_Query, Anda bisa merekomendasikan postingan populer lainnya berdasarkan jumlah komentar yang diterima. Anda pun bisa dengan mudah menampilkan artikel yang paling disukai pembaca:

Contoh penggunaan WP_Query berdasarkan jumlah komentar

Berikut adalah data yang bisa Anda gunakan untuk menyusun struktur rekomendasi berdasarkan popularitas postingan:

<?php
 
// Setup arguments.
$args = array(
    // Order by comment count.
    'orderby' => 'comment_count'
);
 
// Instantiate new query instance.
$my_query = new WP_Query( $args );
 
?>

Anda juga bisa mempersempit hasilnya berdasarkan kategori tertentu. Cukup tambahkan parameter dengan nama kategori Anda:

<?php  
   $arguments = array(
      "category_name" => "fiction",
      "orderby" => "comment_count",
      "posts_per_page" => 5,
   );
   $posts = new WP_Query($arguments);
?>

Kode ini juga akan membatasi jumlah rekomendasi yang ditampilkan menjadi lima postingan saja. Anda bisa mengganti nilai ini bila diperlukan.

4. Postingan dari Penulis dan Kategori Tertentu

Saat pengunjung membaca postingan blog Anda, mereka bisa jadi senang membacanya karena topik postingan tersebut atau gaya menulis salah satu author. Anda pun bisa menggunakan WP_Query untuk merekomendasikan postingan serupa.

Pembaca bisa langsung mengklik artikel lainnya dan lanjut membaca artikel dari author tersebut, atau dengan topik sejenis:

Contoh penggunaan WP_Query berdasarkan penulis

Untuk mencantumkan postingan serupa di area yang sama, Anda perlu menerapkan string WP_Query tertentu. String ini akan mencari postingan di website Anda yang ditulis oleh author yang sama dan dengan kategori yang mirip.

Berikut ini kode yang bisa Anda gunakan:

<?php  
   $arguments = array(
      "author_name" => "john",
      "category_name" => "fiction",
      "posts_per_page" => 3,
   );
   $posts = new WP_Query($arguments);
?>

Saat menerapkan kode ini, jangan lupa untuk mengganti ‘john‘ dengan nama author yang dimaksud. Kemudian, ganti ‘fiction‘ dan masukkan label kategori yang sesuai. Terakhir, Anda bebas memodifikasi jumlah rekomendasi postingan yang ditampilkan di halaman tersebut.

5. Postingan Author dalam Setahun

Kalau memiliki blog yang lumayan besar, Anda mungkin punya banyak penulis dan pasti akan ada pengunjung yang ingin membaca postingan lain dari penulis tersebut setelah membaca salah satu artikelnya.

Di sini, Anda bisa mencantumkan postingan seorang author dari tahun sebelumnya. Dengan begitu pengunjung bisa mencari informasi tentang penulis tersebut beserta tulisan mereka lainnya:

Contoh penggunaan WP_Query berdasarkan postingan tahunan author

Gunakan WP_Query di bawah ini untuk mencantumkan postingan author tertentu dalam rentang waktu tahun ini:

<?php
 
// Get the year we're in.
$current_year = date( 'Y' );
 
// Setup arguments.
$args = array(
    // Get the author with the nicename "john".
    'author' => 'john',
    // Get his posts from this year.
    'year'   => $current_year
);
 
// Instantiate new query instance.
$my_query = new WP_Query( $args );
 
?>

Kode di atas akan mengambil semua postingan yang ditulis oleh salah satu author, dan mempersempit hasilnya berdasarkan tahun saat ini. Hasilnya tidak akan mencantumkan artikel yang diterbitkan di tahun sebelumnya.

6. Mengecek Postingan Terjadwal

Agar pengunjung bisa melihat preview konten yang akan diterbitkan berikutnya (semacam “coming soon”), Anda bisa menampilkan postingan terjadwal di website. Menggunakan WP_Query, Anda bisa menunjukkan judul dan cuplikan postingan.

Trik ini bisa membantu memancing minat pembaca terhadap artikel Anda sebelum diterbitkan. Selain itu, Anda juga bisa menerapkan kodenya dengan mudah menggunakan WP_Query:

<?php
 
/*
 * Usage with Excerpts:
 *
 * <?php echo tutsplus_show_drafts(); ?>
 *
 * Usage without Excerpts:
 *
 * <?php echo tutsplus_show_drafts( false ); ?>
 */
 
function tutsplus_show_drafts( $show_excerpts = true ) {
 
    // Setup arguments.
    $args = array(
        'post_status' => 'future',
        'nopaging' => true
    );
 
    // Instantiate new query instance.
    $my_query = new WP_Query( $args );
 
    // Check that we have query results.
    if ( $my_query->have_posts() ) {
 
        // Begin generating markup.
        $output = '<section class="pending-posts">';
 
        // Start looping over the query results.
        while ( $my_query->have_posts() ) {
 
            $my_query->the_post();
 
            // Output draft post title and excerpt (if enabled).
            $output .= '<div class="pending">';
                $output .= '<h3 class="pending-title">' . get_the_title() . '</h3>';
                    $output .= get_the_title();
                $output .= '</h3>';
 
                if ( $show_excerpts ) {
 
                    $output .= '<div class="pending-excerpt">';
                        $output .= get_the_excerpt();
                    $output .= '</div>';
 
                }
 
            $output .= '</div>';
 
        }
 
        // End generating markup.
        $output .= '</section>';
 
    } else {
 
        // Let user know that nothing was found.
        $output = '<section class="drafts-error">';
            $output .= '<p>' . __( 'Nothing found', 'tutsplus' ) . '</p>';
        $output .= '</section>';
 
    }
 
    wp_reset_postdata();
 
    return $output;
 
}
 
?>

Kode ini akan otomatis menampilkan preview judul artikel yang sudah terjadwal untuk diterbitkan berikutnya. Anda juga bisa menyertakan cuplikan artikel kalau perlu.

Kesimpulan

WP_Query memungkinkan Anda mengirimkan atau mengekseskusi permintaan database dengan mudah di WordPress. Dengan PHP class ini, Anda bisa memodifikasi tampilan website dan menyediakan pengalaman yang lebih personal bagi setiap pengunjung.

Ada 4 cara untuk menggunakan WP_Query di WordPress:

  1. Buat Loop.
  2. Gunakan query argument
  3. Atur parameter tertentu.
  4. Ubah class property.

Setelah memahami dan menguasai teknik-teknik WP_Query di atas, Anda pun bisa merekomendasikan beberapa postingan tertentu kepada pengunjung berdasarkan popularitas, tanggal, penulis, dan lain-lain.

Kalau masih bingung untuk menggunakan WP_Query, jangan ragu untuk menuliskan komentar Anda di bawah ini ya! Pastikan juga untuk menggunakan WordPress hosting terbaik agar performa website lebih optimal.

Author
Penulis

Yuliyana W.

Yuliyana adalah seorang penerjemah lepas dengan berbagai minat. Saat ini dia tertarik mengikuti topik teknologi, dan ingin berbagi sedikit temuannya kepada para pembaca.

Author
Co-author

Faradilla A.

Faradilla, yang lebih akrab disapa Ninda, adalah Content Marketing Specialist di Hostinger. Ia suka mengikuti tren teknologi, digital marketing, dan belajar bahasa. Melalui tutorial Hostinger ini, Ninda ingin berbagi informasi dan membantu pembaca menyelesaikan masalah yang dialami. Kenali Ninda lebih dekat di LinkedIn.