Pada dasarnya saya ingin mencapai glosarium menggunakan jenis posting khusus dan memiliki beberapa masalah pengaturan penulisan ulang seperti yang saya inginkan. Saya menginginkannya seperti itu:
URL glosarium utama:
http://example.com/glossary/
Istilah glosarium dimulai dengan huruf A :
http://example.com/glossary/a/
URL untuk satu istilah glosarium:
http://example.com/glossary/a/atomic/
Saya benar-benar mencapai ini dengan menggunakan kode di bawah ini tetapi saya yakin itu adalah cara yang sangat canggung untuk melakukannya dan saya tahu itu tidak berfungsi di suatu tempat karena template yang salah dipanggil saat melihat halaman. Kecuali untuk http://example.com/glossary/ , di mana arsip-sumo-glossary-term.php dipanggil seperti yang diharapkan, dua lainnya hanya mengaktifkan index.php dalam tema saya.
Ini dia ( functions.php
dalam tema):
add_action('init', 'create_glossary');
function create_glossary()
{
register_post_type
(
'sumo-glossary-term',
array
(
'labels' => array
(
'name' => _x('Glossary Terms', 'post type general name'),
'singular_name' => _x('Glossary Term', 'post type singular name')
# And so on …
),
'supports' => array('title', 'editor', 'thumbnail'),
'public' => true,
'rewrite' => array
(
'slug' => 'glossary',
'with_front' => false
),
'query_var' => 'glossary-term',
'has_archive' => true
)
);
register_taxonomy
(
'sumo-glossary-letter',
'sumo-glossary-term',
array
(
'hierarchical' => true,
'labels' => array
(
'name' => _x('Letters', 'taxonomy general name'),
'singular_name' => _x('Letter', 'taxonomy singular name')
# And so one
),
'show_ui' => true,
'query_var' => 'glossary-letter',
'rewrite' => false
)
);
}
add_filter('post_type_link', 'glossary_term_permalink', 10, 4);
function glossary_term_permalink($post_link, $post, $leavename, $sample)
{
if ($post->post_type == 'sumo-glossary-term')
{
$permalink = str_replace('glossary/', 'glossary/' . $post->post_name[0] . '/', $post_link);
}
return $permalink;
}
add_rewrite_rule('^glossary/([^/]*)?$','index.php?glossary-letter=$matches[1]','top');
add_rewrite_rule('^glossary/([^/]*)/([^/]*)?$','index.php?glossary-term=$matches[2]','top');
/glossary/
. Memberi saya 404 (archive-sumo-glossary-term.php
sudah diatur). Ada ide? Harus mengatakan bahwa saya terjebak ke WP 3.0.1 dan itu mungkin masalah versi. Harus mengujinya lagi ketika saya dapat memutakhirkan. Lagi pula, sebagian besar itu berfungsi dan untuk saat ini saya tidak perlu/glossary/
dan hanya mengarahkan kembali ke huruf A. Terima kasih lagi!'has_archive' => 'glossary'
, alih-alihhas_archive => true
saya hanya memperhatikan bahwa Jan memiliki jawaban seperti itu dalam jawabannya, tetapi Anda tidak memilikinya dengan kode asli Anda - apakah Anda memperbarui bagian itu? Itu mulai bekerja untuk saya begitu saya membuat perubahan ituSaya belum menggunakan ini secara pribadi, tetapi yang mungkin ingin Anda lihat adalah "add_rewrite_rule"
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
juga jangan lupa untuk menyimpan permalink setelah Anda mengubahnya.
sumber
add_rewrite_rule
, cukup gulir kode saya ke bawah. :-) Ini berfungsi dengan baik sejauh ini, hanya saja templat yang salah dipanggil dengan cara melakukannya.