Grundsätzlich möchte ich ein Glossar mit benutzerdefinierten Beitragstypen erstellen und habe einige Probleme beim Einrichten von Umschreibungen, wie ich sie haben möchte. Ich will es so:
Die Hauptglossar-URL:
http://example.com/glossary/
Glossarbegriffe beginnend mit dem Buchstaben A :
http://example.com/glossary/a/
Die URL für einen einzelnen Glossarbegriff:
http://example.com/glossary/a/atomic/
Ich habe dies tatsächlich mit dem folgenden Code erreicht, aber ich bin sicher, dass dies eine sehr umständliche Methode ist, und ich weiß, dass es irgendwo eine Fehlfunktion gibt, da beim Anzeigen der Seiten die falschen Vorlagen aufgerufen werden. Mit Ausnahme von http://example.com/glossary/ , wo archive-sumo-glossary-term.php wie erwartet aufgerufen wird, aktivieren die beiden anderen einfach index.php in meinem Theme.
Hier geht es ( functions.php
im Thema):
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');