Simple Featured Post List in WordPress

sering kali kita ingin beberapa artikel menjadi sebuah headline di-blog atau website yang kita kelola, namun headline ini bisa terus berada dibagian terdepan atau paling atas meski banyak artikel-artikel baru ditambahkan, berikut adalah cara mudah membuat so-called featured post list di blog yang menggunakan wordpress.

cara 1 : menggunakan kategori khusus

penggunaan kategori khusus ini sebenarnya digunakan untuk mengelompokkan posting yang ingin selalu tampil di bagian depan atau atas. perhatikan contoh berikut, blog brain menggunakan kategori “featured” untuk menampilkan tulisan tertentu pada box besar “feat.” dan apabila diperhatikan, tanggal posting-nya pun lebih lama dari yang terbaru.

setelah diputuskan category apa yang akan digunakan, tahap selanjutnya adalah melakukan penambahan kode php di dalam themes yang akan digunakan. penempatan kode bisa dilakukan sesuai dengan selera, misal hanya muncul di halaman utama, selalu muncul di sidebar atau di bagian footer.

berikut adalah contoh kode yang ditambahkan untuk menampilkan list post-nya adalah sebagai berikut :

[php]
echo ‘<h3>FEATURED POST</h3>’;
/* ganti dengan category yg diinginkan */
$category_id = get_cat_ID( ‘Category Name’ );

/* jumlah post yang akan ditampilkan */
$jumlah = 2;

$args = array(
‘cat’ => $category_id,
‘posts_per_page’ => $jumlah,
‘post_status’ => ‘publish’,
‘order_by’ => ‘post_date’,
‘order’ => ‘desc’
);
query_posts($args);

/* tampilkan featured post */
echo ‘<ul>’;
if (have_posts()) : while (have_posts()) : the_post();
echo ‘<li><a href=”‘.get_the_permalink().'”>’;
echo get_the_title();
echo ‘</a></li>’;
endwhile; endif;
echo ‘</ul>’;

wp_reset_query();
[/php]

jangan lupa untuk menyertakan kode wp_reset_query() diakhir penambahan kode, agar variabel kembalian dari fungsi query_post() default halaman tidak tercampur dengan data yang kita tambahkan. perhatikan hasilnya pada gambar dibawah.

cukup mudah bukan?

cara 2 : menggunakan sticky post

sticky post adalah fitur yang diberikan wordpress untuk meletakkan satu atau beberapa posting untuk tampil pertama kali, proses-nya lebih sederhana, namun salah satu kekurangannya adalah semakin banyak sticky post yang tampil, jumlah recent post yang tampil dalam satu halaman akan ikut berkurang.

misalnya anda menampilkan 10 post pada halaman utama, dan anda memiliki 4 sticky post, maka hanya 6 recent post yang akan tampil.

anyway, untuk menampilkan sticky post, kita hanya perlu masuk ke list post di dashboard, klik link “quick edit” dan centang box “make this post sticky“. kemudian klik tombol update and than itz done.

dan contoh tampilannya menjadi seperti berikut :

cara kedua ini lebih mudah karena tidak perlu menambahkan kode php apapun, namun apabila terlalu banyak menggunakan sticky, secara tidak langsung pengunjung akan menganggap tidak ada artikel baru pada blog tersebut, karena jumlah sticky yang terlalu banyak akan menenggelamkan postingan yang terbaru.

cara 3 : menggabungkan 2 cara diatas

cara ketiga ini biasanya digunakan untuk menampilkan posting dengan cara yang lebih kompleks. mungkin secara garis besar adalah ingin meng-hilite beberapa artikel dengan satu atau lebih artikel yang menjadi jagoan, dan artikel-artikel yang di-hilite ini tidak akan muncul pada recent post dibawah.

untuk mendapatkan hasil seperti pola diatas, selain menetukan category yang akan dijadikan featured, artikel jagoan yang dipilih juga harus di-set sebagai sticky, dan kemudian mari kita melakukan beberapa penambahan kode php untuk pemanggilan si featured post list, secara garis besar kode-nya menjadi seperti berikut :

[php]
echo ‘<h3>FEATURED POST</h3>’;
/* ganti dengan category yg diinginkan */
$category_id = get_cat_ID( ‘Category Name’ );

/* jumlah featured post yang akan ditampilkan */
$jumlah = 3;

/* ambil array post yang masuk dalam sticky */
$sticky = get_option(‘sticky_posts’);

$args = array(
‘cat’ => $category_id,
‘posts_per_page’ => $jumlah,
‘post_status’ => ‘publish’,
‘order_by’ => ‘post_date’,
‘order’ => ‘desc’,
‘post__in’ => $sticky,
‘caller_get_posts’ => 1
);
$sticky_opt = array(
‘post__in’ => $sticky,
‘caller_get_posts’ => 1
);
if($sticky) $args = $args + $sticky_opt;

query_posts($args);

/* tampilkan featured post */
$exclude = array();
echo ‘<ul>’;
if (have_posts()) : while (have_posts()) : the_post();
echo ‘<li>Sticky : <a href=”‘.get_permalink().'”>’;
echo get_the_title();
echo ‘</a></li>’;
$exclude[] = $post->ID;
endwhile; endif;
wp_reset_query();

/* tampilkan featured post yang bukan sticky */
if( count($exclude) < $jumlah ) {
$args = array(
‘cat’ => $category_id,
‘posts_per_page’ => $jumlah – count($exclude),
‘post_status’ => ‘publish’,
‘post__not_in’ => $exclude,
‘order_by’ => ‘post_date’,
‘order’ => ‘desc’
);
query_posts($args);

if (have_posts()) : while (have_posts()) : the_post();
echo ‘<li><a href=”‘.get_permalink().'”>’;
echo get_the_title();
echo ‘</a></li>’;
$exclude[] = $post->ID;
endwhile; endif;
}
wp_reset_query();

echo ‘</ul>’;

/* pengumpulan variabel agar tidak tampil lagi */
$sticky = array_unique( array_merge( $sticky, $exclude ) );

wp_reset_query();

/* modifikasi paging post per page */
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
$x = get_option(‘posts_per_page’);
$y = $x * ($paged – 1);

/* modifikasi query_post agar list diatas tidak tampil lagi */
$args = array(
‘cat’ => ‘-‘.$category_id,
‘posts_per_page’ => $x,
‘post_status’ => ‘publish’,
‘order_by’ => ‘post_date’,
‘order’ => ‘desc’,
‘offset’ => ( 0 + $y)
);
if($sticky) $args = $args + array(‘post__not_in’ => $sticky);
query_posts($args);
[/php]

untuk cara ketiga ini, kita tidak perlu menambahkan kode wp_reset_query(), karena kita melakukan perubahan query untuk recent post list yang ditampilkan setelah featured post. setelah kode diatas ditambahkan hasilnya akan tampil sebagai berikut :

sebelum ada sticky dan featured post

after adding featured post (without sticky)

after adding featured post (with sticky)

and now. itz all done.. selamat mencoba :D

By Alit Mahendra Bramantya

Complicatedly simple, not just another internet presence enthusiast. Currently managing Research (including Analytics) Division at Think.Web with Web App Development and Digital Analytics as main responsibility. Views are my own.