Basicamente, quero obter um glossário usando tipos de postagem personalizados e ter alguns problemas de configuração reescrevendo da maneira que quero que sejam. Eu quero assim:
O principal URL do glossário:
http://example.com/glossary/
Termos do glossário que começam com a letra A :
http://example.com/glossary/a/
O URL para um único termo do glossário:
http://example.com/glossary/a/atomic/
Eu realmente consegui isso usando o código abaixo, mas tenho certeza de que é uma maneira muito incômoda de fazê-lo e sei que está funcionando mal em algum lugar, pois os modelos errados são chamados ao visualizar as páginas. Exceto por http://example.com/glossary/ , em que archive-sumo-glossary-term.php é chamado conforme o esperado, os outros dois ativam o index.php no meu tema.
Aqui vai ( functions.php
no 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');
fonte
/glossary/
. Dá-me um 404 (archive-sumo-glossary-term.php
está configurado). Alguma ideia? Tenho que dizer que estou preso ao WP 3.0.1 e talvez seja um problema de versão. Preciso testá-lo novamente quando eu puder atualizar. De qualquer forma, na maioria das vezes está funcionando e, por enquanto, não preciso necessariamente/glossary/
e apenas redireciono para a letra A. Obrigado novamente!'has_archive' => 'glossary'
, em vez dehas_archive => true
apenas notar que Jan tem a mesma resposta, mas você não a encontra no código original - atualizou essa parte? Ele começou a trabalhar para mim assim que eu fiz essa mudançaEu não usei isso pessoalmente, mas o que você pode querer considerar é "add_rewrite_rule"
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
também não se esqueça de salvar os permalinks depois de alterá-los.
fonte
add_rewrite_rule
, eu uso , basta rolar meu código para baixo. :-) Até agora, está funcionando bem, apenas os modelos errados são chamados com essa maneira de fazê-lo.