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');
/glossary/
. Me donne un 404 (archive-sumo-glossary-term.php
est installé). Des idées? Je dois dire que je suis bloqué sur WP 3.0.1 et c'est peut-être un problème de version. Je dois le tester à nouveau lorsque je pourrai mettre à niveau. Quoi qu'il en soit, pour la plupart, cela fonctionne et pour l'instant je n'ai pas nécessairement besoin de/glossary/
rediriger vers la lettre A. Merci encore!'has_archive' => 'glossary'
, au lieu dehas_archive => true
je viens de remarquer que Jan l'a comme ça dans sa réponse, mais vous ne l'avez pas comme ça dans votre code d'origine - avez-vous mis à jour cette partie? Cela a commencé à fonctionner pour moi dès que j'ai apporté ce changementJe ne l'ai pas personnellement utilisé, mais ce que vous voudrez peut-être regarder est "add_rewrite_rule"
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
n'oubliez pas non plus de sauvegarder les permaliens une fois que vous les avez modifiés.
la source
add_rewrite_rule
, faites simplement défiler mon code vers le bas. :-) Cela fonctionne bien jusqu'à présent, c'est seulement que les mauvais modèles sont appelés avec cette façon de le faire.