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');
/glossary/
. Gibt mir einen 404 (archive-sumo-glossary-term.php
ist eingerichtet). Irgendwelche Ideen? Ich muss sagen, ich bleibe bei WP 3.0.1 und es ist möglicherweise ein Versionsproblem. Muss ich nochmal testen, wenn ich ein Upgrade durchführen kann. Auf jeden Fall funktioniert es größtenteils und im Moment brauche ich es nicht unbedingt/glossary/
und leite einfach zu Buchstabe A weiter. Nochmals vielen Dank!'has_archive' => 'glossary'
, anstatt zuhas_archive => true
bemerken, dass Jan sie so in seiner Antwort hat, aber du hast sie nicht so in deinem ursprünglichen Code - hast du diesen Teil aktualisiert? Es begann für mich zu arbeiten, sobald ich diese Änderung vornahmIch habe dies nicht persönlich verwendet, aber was Sie vielleicht sehen möchten, ist "add_rewrite_rule".
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
Vergiss auch nicht, Permalinks zu speichern, wenn du sie geändert hast.
quelle
add_rewrite_rule
, scrolle einfach meinen Code nach unten. :-) Bisher funktioniert es einwandfrei, nur dass bei dieser Vorgehensweise die falschen Vorlagen aufgerufen werden.