Básicamente, quiero lograr un glosario usando tipos de publicaciones personalizadas y tengo algunos problemas para configurar las reescrituras de la forma en que quiero que sean. Lo quiero así:
La URL principal del glosario:
http://example.com/glossary/
Términos del glosario que comienzan con la letra A :
http://example.com/glossary/a/
La URL para un solo término del glosario:
http://example.com/glossary/a/atomic/
Realmente logré esto usando el código a continuación, pero estoy seguro de que es una forma muy incómoda de hacerlo y sé que está funcionando mal en algún lugar, ya que se llaman las plantillas incorrectas al ver las páginas. A excepción de http://example.com/glossary/ , donde se llama a archive-sumo-glossary-term.php como se esperaba, los otros dos simplemente activan index.php en mi tema.
Aquí va ( functions.php
en el tema):
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 da un 404 (archive-sumo-glossary-term.php
está configurado). ¿Algunas ideas? Debo decir que estoy atascado en WP 3.0.1 y tal vez sea un problema de versión. Tengo que probarlo de nuevo cuando pueda actualizar. De todos modos, en su mayor parte está funcionando y por ahora no necesariamente necesito/glossary/
y simplemente redirijo a la letra A. ¡Gracias de nuevo!'has_archive' => 'glossary'
, en lugar dehas_archive => true
notar que Jan lo tiene así en su respuesta, pero no lo tiene así en su código original: ¿actualizó esa parte? Comenzó a funcionar para mí tan pronto como hice ese cambioNo he usado esto personalmente, pero lo que querrás ver es "add_rewrite_rule"
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
Tampoco olvides guardar los enlaces permanentes una vez que los hayas cambiado.
fuente
add_rewrite_rule
, solo desplazo mi código hacia abajo. :-) Funciona bien hasta ahora, es solo que se llama a las plantillas incorrectas con esta forma de hacerlo.