Bagaimana Anda menampilkan arsip Jenis Posting Kustom menurut Tahun & Bulan?
Bagaimana Anda menampilkan arsip Jenis Posting Kustom menurut Tahun & Bulan?
Jawaban:
Ya kamu bisa. Yang Anda butuhkan hanyalah membuat filter wp_get_archives();
agar menerima post_type
parameter:
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
lalu panggil ini:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
Setiap kali Anda ingin menampilkan arsip berdasarkan jenis posting khusus, sampaikan argumen post_type:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. Kemudian, mungkin saja menggunakan pengait seperti di atas, untuk memodifikasi tautan untuk memulai dengan /%category%/
alih - alih hanya tanggal.
mysite.com/2013/04
tetapi ini mengarah ke 404. Jenis pos kustom tersedia di: mysite.com/cats
yang membuat saya berpikir mysite.com/cats/2013/04
akan seperti apa tautannya, tetapi ini juga memutuskan ke 404. Bagaimana Anda membuat tautan arsip berfungsi?
Anda tidak, baris resmi dari pengembang Wordpress adalah bahwa jenis posting kustom tidak dimaksudkan untuk melakukan pekerjaan posting biasa, dan bahwa jika Anda memerlukan arsip posting tanggal dll, maka Anda tidak melakukan hal-hal dengan benar, dan Anda lebih baik menggunakan format pos dll.
Jenis posting khusus ditujukan untuk aplikasi web, dll. Sedangkan melakukan sesuatu seperti mengatur jenis posting khusus yang bertindak sebagai blog sekunder atau paralel dengan nama yang berbeda, mis. Blog vs berita, dengan kemampuan yang sama, bukan seperti apa fitur itu. dimaksudkan untuk, dan akan berarti masalah teknis lainnya yang timbul dari penerapannya.
Jika Anda masih ngotot dengan hal ini, dan cukup menggunakan taksonomi khusus dan format pos tidak cukup, Anda bisa menambahkan aturan penulisan ulang di functions.php dan mengarahkan ulang arsip tahun / bulan di URL tertentu ke halaman arsip posting, dan kemudian memeriksa kebiasaan posting halaman arsip jika Anda telah menentukan variabel dalam aturan penulisan ulang dan memuat template yang berbeda, pastikan dalam aturan penulisan ulang Anda untuk menetapkan nilai yang sesuai.
EDIT -> sementara jawaban ini masih berfungsi untuk <WP4.4, karena 4.4 dukungan untuk Jenis Posting Kustom sekarang dimasukkan dalamwp_get_archives()
Akhirnya ada solusi sederhana, cepat dan mudah untuk arsip berdasarkan tanggal Jenis Tulisan Kustom di WordPress! Ini telah menjadi masalah lama yang dicatat di sini di WP Core Trac.
Itu belum diselesaikan tetapi salah satu kontributor Trac telah memposting plugin sederhana di GitHub yang akan memungkinkan Anda untuk memiliki arsip berdasarkan tanggal untuk CPT.
Setelah menginstal plugin ini, atau menambahkan kode untuk fungsi Anda secara manual, Anda dapat menggunakan arsip untuk CPT sebagai berikut:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
Perhatikan bahwa fungsi baru ini berfungsi wp_get_archives_cpt
sama dengan standar wp_get_archives
sehingga Anda dapat menggunakan argumen reguler apa pun yang diterimanya. Namun, itu hanya menambah kemampuan bagi Anda untuk dapat menambahkan argumen nama jenis pos kustom.
Tidak cukup reputasi untuk menambahkan ini ke jawaban taiken, maaf.
Namun ingin menambahkan bahwa jawabannya berhasil bagi saya, namun tautannya ada dalam format 'localhost / date / 2010'. Padahal saya membutuhkan format 'localhost / postslug / 2010'. Saya dapat memperbaikinya dengan menggunakan string replace pada output wp_get_archives.
Jadi, tergantung pada bagaimana Anda mengatur permalink Anda, kode ini akan memperbaiki masalah 404 dan mengarahkan kembali tautan ke struktur permalink jenis posting kustom:
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
Tidak dapat menambahkan ke pos takien jadi inilah yang akhirnya harus saya lakukan:
functions.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
Memanggil wp_get_archives ()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));