Quando migrei para o WP 2.3 passei todas as categorias para tags/etiquetas, acabando por ficar com os posts todos sem categoria. No WP 2.3 mudaram o esquema das tabelas da base de dados relativos à taxonomia dos posts, para que este seja flexível e suporte vários estilos de indexação, como as categorias ou as etiquetas (ou tags).
Para resolver o problema, e pelo menos ter os posts na categoria default teria que editar no interface do WordPress cada post para lhe atribuir a categoria default (a que no meu caso chamei Blog, mas é irrelevante, basta saber que tem o identificador 1).
Como isso era um pouco (só um cadito) trabalhoso, fui directamente à base de dados tratar do assunto. Actualmente existem 3 tabelas para a taxonomia:
- wp_terms
- wp_term_taxonomy
- wp_term_relationship
Define o nome dos termos, no caso mais comum acabará por ser o nome das categorias ou etiquetas, e atribui-lhes um identificador numérico;
Esta tabela define o que cada termo representa: categoria, etiqueta ou outra coisa qualquer;
Esta tabela associa os termos aos “objectos” que é suposto caracterizarem, seja posts, páginas, etc.
Considerando que a categoria ‘default’ é o termo 1 da tabela wp_terms, que queremos relacionar com cada post:
INSERT INTO wp_term_relationships (object_id,term_taxonomy_id)
SELECT ID, 1 FROM wp_posts
WHERE wp_posts.post_type = 'post'
ON DUPLICATE KEY UPDATE term_taxonomy_id=1
Isto vai adicionar uma entrada na tabela de relações para cada post para a categoria 1, ou seja a default. Para não termos erros (talvez haja forma de ignorar entradas duplicadas, mas não sei ao certo como…) optei por fazer o UPDATE em caso de entradas duplicadas.
Depois há sempre um plugin como o Batch Categories para tratar em massa os posts que agora já aparecem na listagem dado a já terem categoria. 🙂