Về cơ bản tôi muốn đạt được một thuật ngữ bằng cách sử dụng các loại bài đăng tùy chỉnh và có một số vấn đề thiết lập viết lại theo cách tôi muốn. Tôi muốn nó như thế:
URL bảng chú giải chính:
http://example.com/glossary/
Thuật ngữ bắt đầu bằng chữ A :
http://example.com/glossary/a/
URL cho một thuật ngữ duy nhất:
http://example.com/glossary/a/atomic/
Tôi thực sự đã đạt được điều này bằng cách sử dụng mã dưới đây nhưng tôi chắc chắn rằng đó là một cách rất khó thực hiện và tôi biết nó bị trục trặc ở đâu đó vì các mẫu sai được gọi khi xem các trang. Ngoại trừ http://example.com/glossary/ , trong đó archive-sumo-glossary-term.php được gọi như mong đợi, hai cái còn lại chỉ kích hoạt index.php trong chủ đề của tôi.
Ở đây đi ( functions.php
trong chủ đề):
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');