Arsip Jenis Posting Kustom menurut Tahun & Bulan?


Jawaban:


17

Ya kamu bisa. Yang Anda butuhkan hanyalah membuat filter wp_get_archives();agar menerima post_typeparameter:

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

3
Apakah Anda mencoba solusi ini? Itu benar mengambil daftar bulan dengan posting dari CPT Anda dan jumlah posting, tetapi tautan tidak berguna. Mengkliknya akan membawa Anda ke bulan untuk seluruh situs, bukan untuk CPT.
jerclarke

Setelah beberapa penggalian (lihat jawaban Tom Nowell di bawah), saya menyerah pada arsip bulanan untuk jenis posting khusus. Sebagai gantinya, saya menggunakan kategori posting, dan mengubah struktur permalink saya menjadi /%category%/%year%/%monthnum%/%postname%/. Kemudian, mungkin saja menggunakan pengait seperti di atas, untuk memodifikasi tautan untuk memulai dengan /%category%/alih - alih hanya tanggal.
Kevin C.

Pertanyaan tentang ini. Ini membuat url seperti: mysite.com/2013/04tetapi ini mengarah ke 404. Jenis pos kustom tersedia di: mysite.com/catsyang membuat saya berpikir mysite.com/cats/2013/04akan seperti apa tautannya, tetapi ini juga memutuskan ke 404. Bagaimana Anda membuat tautan arsip berfungsi?
gaoshan88

2
Bahkan lebih baik, akhirnya ada plugin untuk menangani fungsi yang hilang ini di WordPress. Itu dibuat oleh kontributor inti yang mencoba untuk memperbaiki masalah ini di inti. Plugin ini disediakan untuk membantu kami sampai masalah ini ditangani dengan benar di inti. wordpress.org/plugins/archives-for-custom-post-types
Trevor

6

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.


Tampaknya agak aneh bahwa mereka hanya akan sejauh ini dengan fungsi ini. Bisakah Anda memberi saya contoh bagaimana posting khusus harus digunakan?
Dan Lee

Posting khusus harus digunakan untuk apa pun yang tidak tercakup oleh lingkup halaman dan posting blog (atau posting blog dengan nama yang berbeda tetapi berfungsi sama, misalnya artikel / berita / buku harian / dll.) Contoh penggunaan posting kustom yang benar termasuk : acara, menu, lokasi, formulir, log, dll
Tom J Nowell

Posting kustom pada dasarnya adalah cara untuk menghasilkan aplikasi web, mereka bukan cara menduplikasi menu posting di backend untuk mengedit lebih mudah (dan penggunaan seperti itu akan membuat wordpress jauh lebih lambat dan lebih banyak tugas daripada yang Anda sadari)
Tom J Nowell

1
UUUUUgh. Ini adalah jawaban yang benar untuk pertanyaan itu secara tragis. Saya tidak percaya bahwa penjelasan di atas didasarkan pada "kita seharusnya tidak memiliki URL tanggal untuk CPT" meskipun, hampir pasti "URL tanggal untuk CPT terlalu rumit" yang mendorong keputusan aktual untuk tidak menerapkan. JELAS ada kasus di mana orang ingin arsip tanggal untuk jenis posting kustom, Anda tidak dapat membuat keinginan yang jelas menghilang dengan menunjukkan format posting.
jerclarke

1
Saya harus sangat tidak setuju. Jenis pos khusus dimaksudkan untuk digunakan untuk apa pun yang Anda inginkan, untuk apa pun yang menurut Codex tidak tertulis untuk "aplikasi web". Juga, Anda mungkin sangat membutuhkan bagian "berita" yang memiliki taksonomi tersendiri dan Anda ingin arsip untuk itu. Atau bahkan tipe "peristiwa" yang disarankan, yang saya setujui adalah penggunaan yang sempurna untuk CPT, tetapi sekali lagi yang mudah dapat membutuhkan arsip berbasis tanggal.
Trevor

5

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_cptsama dengan standar wp_get_archivessehingga Anda dapat menggunakan argumen reguler apa pun yang diterimanya. Namun, itu hanya menambah kemampuan bagi Anda untuk dapat menambahkan argumen nama jenis pos kustom.


2

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

1

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

Lihat ini adalah jawaban pertama Anda. Hanya sebuah tip ketika menjawab pertanyaan, jangan hanya menambahkan kode atau tautan itu saja. Meskipun kode Anda mungkin berfungsi, selalu menyenangkan mengetahui apa yang kode Anda lakukan dan mengapa itu harus bekerja. Kalau tidak, jawaban Anda diformat dengan baik. +1 untuk itu
Pieter Goosen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.