Estou realmente tendo alguns problemas com a inserção de termos. Aqui está o meu cenário: eu tenho uma taxonomia chamada veda_release_type:
//Release Type and Region
$labels = array(
'name'=> _x('Release Types/Regions', 'taxonomy general name' ),
'singular_name' => _x('Release Type/Region', 'taxonomy singular name'),
'search_items' => __('Search Release Types/Regions'),
'popular_items' => __('Popular Release Types/Regions'),
'all_items' => __('All Release Types/Regions'),
'edit_item' => __('Edit Release Type/Regions'),
'edit_item' => __('Edit Release Type/Region'),
'update_item' => __('Update Release Type/Region'),
'add_new_item' => __('Add New Release Type/Region'),
'new_item_name' => __('New Release Type/Region Name'),
'separate_items_with_commas' => __('Seperate Release Types/Regions with Commas'),
'add_or_remove_items' => __('Add or Remove Release Types/Regions'),
'choose_from_most_used' => __('Choose from Most Used Release Types/Regions')
);
$args = array(
'hierarchical' =>true,
'labels' => $labels,
'query_var' => true,
'rewrite' => array('slug' =>'release_type')
);
register_taxonomy('veda_release_type', 'veda_release',$args);
É obviamente hierárquico. O nível superior contém tipos de versão, como DVD, blu-ray. O nível abaixo disso são regiões, ie. Região 1, Região 2, etc. Portanto, a Hierarquia que eu quero é: DVD - Região 0 - Região 1 - Região 2 - Região 2 - Região 3 - Região 4 - Região 5 - Região 6 Blu-Ray - -Região A --Região B --Região C
Eu criei uma função chamada insert_term na minha classe para verificar se existe um termo e insira-o se não existir:
public function insert_term ($term, $taxonomy, $args = array()) {
if (isset($args['parent'])) {
$parent = $args['parent'];
} else {
$parent = 0;
}
$result = term_exists($term, $taxonomy, $parent);
if ($result == false || $result == 0) {
return wp_insert_term($term, $taxonomy, $args);
} else {
return (array) $result;
}
}
E então eu chamo a referida função para inserir os termos:
$dvd = $this->insert_term('DVD','veda_release_type');
$this->insert_term('Region 0','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 1','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 2','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 3','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 4','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 5','veda_release_type',array('parent'=>$dvd['term_id']));
$this->insert_term('Region 6','veda_release_type',array('parent'=>$dvd['term_id']));
$bd = $this->insert_term('Blu-Ray', 'veda_release_type');
$this->insert_term('Region A','veda_release_type',array('parent'=>$bd['term_id']));
$this->insert_term('Region B','veda_release_type',array('parent'=>$bd['term_id']));
$this->insert_term('Region C','veda_release_type',array('parent'=>$bd['term_id']));
O problema que estou tendo é que, embora os termos sejam inseridos no banco de dados, eles não aparecem na página de taxonomia. No máximo, os termos de nível superior são exibidos. Eu tenho que tentar várias coisas até que isso força o WordPress a reconhecer os termos do subnível. Alguém já se deparou com isso ou pode recomendar uma maneira melhor?
EDIT: Notou outra coisa: tentei excluir os termos do banco de dados, desativar e reativar o plug-in que declara os termos. Os dois termos pai aparecem na página de termos, mas os termos filhos não. Os termos filhos aparecem no menu suspenso "Pai", onde você deseja criar um novo termo. Quando adiciono um termo cujo pai é um dos termos filhos e atualizo a página, ENTÃO os termos filhos são exibidos.
fonte
Respostas:
A hierarquia é armazenada em cache e não é invalidada corretamente. Este é um erro, ainda não resolvido a partir do WP 3.1.
Uma solução alternativa seria ligar
delete_option("{$taxonomy}_children");
diretamente.Veja a função _get_term_hierarchy ().
fonte
Meus 2 centavos - estou construindo uma extensão para o plug-in WooCommerce que permite o gerenciamento de categoria / produto de catálogo por meio de um arquivo CSV carregado. Corri para esse mesmo problema ao gerar as categorias. A solução para limpar as categorias em cache do WooCommerce foi ligar
delete_option("product_cat_children");
após o loop que cria as categorias e subcategorias. Espero que isso ajude alguém!fonte
Você pode estar recebendo um objeto de volta
term_exists($term, $taxonomy, $parent)
se a taxonomia estiver definida quando chamada. Ele está definido no código de exemplo que você postou, então estou assumindo que esse é o problema.Suas instruções de inserções estão esperando uma matriz quando fazem referência a chaves.
Por exemplo.
..mas você pode realmente estar recebendo um objeto de volta
term_exists
.Uma maneira rápida de determinar se esse é o problema seria atualizar esta linha.
para..
Se estou certo e esse é o problema, isso deve corrigi-lo, embora eu não chame isso de uma correção elegante.
Espero que essa seja a resposta / ajuda que você estava procurando .. :)
fonte
Obrigado. Esta pergunta ajudou muito. Eu estava lutando com testes de unidade e descobri que tinha que fazer
depois de adicionar minhas categorias de nível superior e fazê-lo novamente depois de adicionar as categorias de segundo nível para permitir que o wordpress limpe tudo e permita que os testes de unidade sejam aprovados. Isso soluciona a necessidade de um "carregamento de segunda página / atualização extra" referido em outra resposta aqui.
fonte
minha solução:
(talvez fosse necessário limpar os registros de cache ..)
fonte
Apenas uma atualização final: isso foi corrigido durante todo o caminho de volta no WP 3.9: https://core.trac.wordpress.org/ticket/14485
fonte