Sepertinya pertanyaan bodoh. Tapi, saya tidak tahu :(.
Saya perlu menampilkan tombol di rumah yang menuju ke URL arsip post_type khusus (archive- {post_type} .php). Bagaimana aku melakukan itu?
Sepertinya pertanyaan bodoh. Tapi, saya tidak tahu :(.
Saya perlu menampilkan tombol di rumah yang menuju ke URL arsip post_type khusus (archive- {post_type} .php). Bagaimana aku melakukan itu?
Jawaban:
Hai @Silent:
Ternyata ada fungsi di WordPress 3.1 yang melakukan persis apa yang Anda inginkan dan namanya get_post_type_archive_link()
; begini cara Anda menyebutnya (dengan asumsi jenis pos khusus bernama 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
Di bawah ini adalah jawaban saya sebelumnya sebelum saya menemukan bahwa WordPress memang memiliki fungsi bawaan untuk use case ini.
Kecuali saya mengabaikan sesuatu dalam kode sumber inti untuk WordPress 3.1 Saya pikir Anda mencari fungsi seperti get_archive_link()
yang Anda sebut seperti ini (dengan asumsi jenis posting kustom bernama 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
Dan inilah kode sumber yang dapat Anda tempatkan ke function.php
file tema Anda atau dalam .php
file untuk plugin yang mungkin Anda tulis:
if (!function_exists('get_archive_link')) {
function get_archive_link( $post_type ) {
global $wp_post_types;
$archive_link = false;
if (isset($wp_post_types[$post_type])) {
$wp_post_type = $wp_post_types[$post_type];
if ($wp_post_type->publicly_queryable)
if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
$slug = $wp_post_type->has_archive;
else if (isset($wp_post_type->rewrite['slug']))
$slug = $wp_post_type->rewrite['slug'];
else
$slug = $post_type;
$archive_link = get_option( 'siteurl' ) . "/{$slug}/";
}
return apply_filters( 'archive_link', $archive_link, $post_type );
}
}
Saya benar-benar bekerja pada logika yang tepat ini selama akhir pekan meskipun saya belum 100% yakin bahwa urutan logika secara umum benar di semua kasus penggunaan yang mungkin dilihat oleh WordPress meskipun mungkin akan bekerja untuk situs tertentu.
Ini juga merupakan hal yang bagus untuk disarankan ditambahkan ke WordPress melalui trac yang saya pikir akan saya lakukan nanti malam.
ketika Anda mendaftarkan jenis posting, Anda dapat meneruskan string sebagai siput dengan parameter "has_archive" dan pastikan Anda juga mengatur penulisan ulang menjadi true atau array tetapi tidak false dan kemudian URL arsip CPT Anda akan menjadi http://www.YOURDOMAIN.com / has_archive_slug misalnya
jika Anda mengatur register_post_type Anda misalnya:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => 'product',
'capability_type' => 'post',
'has_archive' => 'products',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('product',$args);
maka url tunggal Anda adalah: http://www.YOURDOMAIN.com/product/postName dan url arsip Anda adalah: http://www.YOURDOMAIN.com/products/
has_archive
itu boolean, tapi sekarang saya tahu itu bisa diberikan string, jadi tipe posting khusus tunggal saya recipe
dapat memiliki siput jamak/recipes/
'rewrite'
hanya menerima nilai boolean atau array. Daripada yang 'rewrite' => 'product',
telah Anda daftarkan, itu seharusnya 'rewrite' => array( 'slug' => 'product' ),
.
yoursite.com/type-slug
kecuali Anda secara eksplisit mengaturnya ke sesuatu yang lain, misalnya.yoursite.com/some-other-url
..