Fondamentalement, je veux réaliser un glossaire en utilisant des types de publication personnalisés et avoir des problèmes pour configurer la réécriture comme je le souhaite. Je le veux comme ça:
URL du glossaire principal:
http://example.com/glossary/
Termes du glossaire commençant par la lettre A :
http://example.com/glossary/a/
L'URL pour un seul terme du glossaire:
http://example.com/glossary/a/atomic/
J'ai réussi à le faire en utilisant le code ci-dessous, mais je suis sûr que c'est une façon très maladroite de le faire et je sais que cela fonctionne mal quelque part car les mauvais modèles sont appelés lors de l'affichage des pages. À l'exception de http://example.com/glossary/ , où archive-sumo-glossary-term.php est appelé comme prévu, les deux autres activent simplement index.php dans mon thème.
Voilà ( functions.php
dans le thème):
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');