Por que get_term () requer taxonomia? Os term_ids não são exclusivos?

8

Uma pergunta relacionada à WPSE pergunta como obter o termo especificando apenas ID, sem especificar taxonomia. Minha pergunta é mais filosófica. Geralmente, as coisas no núcleo do WP existem por um motivo. Estou tentando entender por que term_id não pode ser a chave principal do termo - por que precisamos da taxonomia também? Um registro de um único termo pode ser membro de múltiplas taxonomias? Certamente, isso atualmente não é suportado na API. Existe um caso de uso em que isso possa ser desejável?

Ou é o $taxonomyparâmetro necessário em get_term()uma cauda vestigial de uma encarnação anterior da estrutura do banco de dados?

Tom Auger
fonte
3
Não tenho muita certeza, mas acho que é mais um problema de desempenho, já que o campo de taxonomia da wp_term_taxonomytabela é usado como índice para essa tabela, o que torna a consulta mais rápida (mesmo que seja apenas um termo).
Bainternet
@Bainternet Por favor, dê uma olhada no final do meu A. EXPLAINdiz term_id.
Kaiser
11
Eu acho que é uma cauda vestigial. Registrando um tíquete com o Trac: core.trac.wordpress.org/ticket/20536
Tom Auger

Respostas:

3

Eu registrei um ticket contra isso com trac: http://core.trac.wordpress.org/ticket/20536

No entanto, acontece que, por enquanto, é necessário, pois o WordPress atualmente (desde a versão 2.x) tem um bug que associa dois termos com o mesmo nome ao mesmo term_id! Portanto, é possível (embora incorreto) associar um único termo a mais de uma taxonomia. Veja este bug: http://core.trac.wordpress.org/ticket/5809

É bastante abrangente, portanto, a implementação da correção precisará ser testada em unidade com muito cuidado. Tentarei lembrar de atualizar esta pergunta se houver algum desenvolvimento.

Tom Auger
fonte
Este é DEFINITIVAMENTE o caso! Esse bug me causou uma grande instalação (várias centenas) de vários sites ... Muito estranho. E observe que o bug tem 5 anos ... No entanto, o patch está agendado para inclusão na versão 3.6, portanto, isso pode ser corrigido! (Finalmente! :))
rinogo 23/03
Obrigado por atualizar esta pergunta para escolher a resposta correta, Tom! Espero que isso ajude aqueles que pousarem nessa questão no futuro. E obrigado pela resposta / links. Muito útil.
rinogo 23/03
11
Lembrete para atualizar esta pergunta - aliás , não havia algo com alias de termo ?
Kaiser
Oi @kaiser, atualize com o quê? Não tenho certeza de que tenha havido mais algum movimento positivo em direção à resolução dos problemas do Trac mencionados.
21813 Tom Auger
Atualmente, o destino está definido como 3,7-mais cedo . Vamos ver o que acontece. O que está faltando? Não foi possível acompanhar no final, pois houve um teste de unidade pelo que li.
Kaiser
1

por que precisamos da taxonomia também? Um registro de um único termo pode ser membro de múltiplas taxonomias?

Não. Os termos têm lesmas para suportar arquivos de termos. E ter as lesmas duas vezes traz muitos minetraps ou "wontfix" es em alguns cenários de link permanente.

Existe um caso de uso em que isso possa ser desejável?

Sim: imagine que você tenha termos para, por exemplo, sizee tenha três taxonomias nomeadas length, width e height(você também pode pensar em cores). Mas isso não é suportado pelos motivos mencionados acima.

Geralmente, as coisas no núcleo do WP existem por um motivo. Estou tentando entender por que term_id não pode ser a chave principal do termo - por que precisamos da taxonomia também?

Olhando para a tabela e executando um EXPLAIN, term_id é a chave primária. Acho que em sistemas maiores pode ser mais rápido consultar apenas termos específicos da taxonomia usando uma junção (lenta) do que consultar todos, classificando-os e filtrando o que você precisa.

kaiser
fonte
Pelos sons das coisas, então, ou existe um erro (talvez sobra do esquema anterior) ou existe em algum caso futuro em que você poderá ter slugs duplicados (improvável). De qualquer forma, não tenho certeza de que você respondeu à minha pergunta.
Tom Auger
@TomAuger "Existe um caso de uso em que isso possa ser desejável": Sim. Mas os contra pesos mais. Um termo no imposto A pode ter o mesmo nome que um no imposto B, mas um significado diferente, por exemplo. Então, se você está consultando "peso" em taxonomias "importância" e "custos de remessa", o que seria "realmente pesado"?
Kaiser
Sim, mas aqui estamos falando de ID do termo, não do nome NAME. O ID já desambigua completamente o termo de qualquer outro termo (em qualquer taxonomia) que possa ter o mesmo nome. Observe que isso é menos uma questão de banco de dados e mais sobre por que ela foi deixada no código principal.
Tom Auger
@TomAuger Teria sido mais fácil se você seguiu este Q no final de dezembro eu agora teria trabalho novamente para isto: /
kaiser