A melhor maneira de remover programaticamente uma categoria / termo de uma postagem

8

Estou trabalhando em um script para converter todas as postagens em uma determinada categoria para usar um sinalizador postmeta (o teste do MySQL me mostrou que em um site tão grande quanto o meu, isso levará a uma diminuição significativa no tempo de consulta).

Ao converter postagens, quero apenas buscar todas as postagens na categoria, adicione o postmeta e remova a categoria, o que me permitirá recarregar essa função até que não haja mais postagens na categoria.

Não consigo encontrar uma boa função para remover um termo de uma postagem. Quero dar a ele o ID da postagem e o termo taxonomia + ID, e manuseá-lo.

Também estou interessado em plugins que podem fazer a conversão para mim, se alguém souber de um. Eu não consegui encontrar nenhum que fizesse cat-> postmeta, ao contrário do que pode ser tratado pelo plugin do Scribu.

jerclarke
fonte
Deseja fazer isso por meio da API ou pode fazer isso com consultas SQL? Não será muito difícil, apenas uma consulta para inserir os novos valores pós-meta, uma para remover os relacionamentos pós-categoria e talvez uma para atualizar a contagem de categorias.
Jan Fabry
Eu definitivamente quero usar a API. A contagem de categorias, etc. não é algo que eu deva considerar neste caso. O wp_get_object_terms () / wp_set_object_terms () já facilitará bastante a manipulação de termos, mas eu esperava uma solução de uma função a partir do núcleo.
Jerclarke

Respostas:

6

Hmmm, também não consigo lembrar ou encontrar a função apropriada.

Existe wp_set_object_terms()isso é usado em vários wrappers como wp_set_post_categories(). Ele pode sobrescrever categorias para uma postagem.

Assim, você pode obter categorias de postagem, procurar por indesejadas e escrevê-las novamente, excluindo indesejadas nesse caso.

Rarst
fonte
Esta é a melhor solução até agora e a que provavelmente usarei. get_object_terms () para buscar, desmarque () o que eu não quero e, em seguida, wp_set_object_terms () para salvar novamente a matriz. Pena que não há wp_set_object_term () e wp_remove_object_term ().
Jerclarke
Foi assim que eu fiz no passado. É bastante desajeitado e repleto de melhorias, mas acredito que seja o melhor padrão disponível.
editor de