J'ai vraiment quelques problèmes avec l'insertion de termes. Voici mon scénario: j'ai une taxonomie appelée 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);
C'est évidemment hiérarchique. Le niveau supérieur contient les types de version ieDVD, blu-ray. Le niveau sous qui sont les régions à savoir. Région 1, Région 2, etc. Donc, la hiérarchie que je veux est: DVD - Région 0 - Région 1 - Région 2 - Région 3 - Région 4 - Région 5 - Région 6 Blu-Ray - -Région A --Région B --Région C
J'ai créé une fonction appelée insert_term dans ma classe pour vérifier si un terme existe puis l'insérer si ce n'est pas le cas:
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;
}
}
Et puis j'appelle ladite fonction pour insérer les termes:
$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']));
Le problème que j'ai, c'est que même si les termes sont entrés dans la base de données, ils n'apparaissent pas sur la page de taxonomie. Tout au plus, les termes de premier niveau apparaissent. Je dois essayer diverses choses jusqu'à ce qu'il force WordPress à reconnaître les termes de sous-niveau. Quelqu'un at-il rencontré cela ou peut-il recommander une meilleure façon?
EDIT: J'ai remarqué autre chose: j'ai essayé de supprimer les termes de la base de données, puis de désactiver et de réactiver le plugin qui déclare les termes. Les deux termes parent apparaissent dans la page des termes, mais pas les termes enfants. Les termes enfants apparaissent dans le menu déroulant "Parent" où vous souhaitez créer un nouveau terme. Lorsque j'ajoute un terme dont le parent est l'un des termes enfants et actualise la page, ALORS les termes enfants s'affichent.
la source
Réponses:
La hiérarchie est mise en cache et elle n'est pas invalidée correctement. Il s'agit d'un bug, toujours non résolu depuis WP 3.1.
Une solution de contournement serait d'appeler
delete_option("{$taxonomy}_children");
directement.Voir la fonction _get_term_hierarchy ().
la source
Mes 2 cents - Je construis une extension pour le plugin WooCommerce qui permet la gestion des catégories / produits de catalogue via un fichier CSV téléchargé. J'ai rencontré ce même problème lors de la génération des catégories. La solution pour effacer les catégories WooCommerce mises en cache était d'appeler
delete_option("product_cat_children");
après la boucle qui crée les catégories et sous-catégories. J'espère que ceci aide quelqu'un d'autre!la source
Vous pourriez éventuellement recevoir un objet de retour
term_exists($term, $taxonomy, $parent)
si la taxonomie est définie lors de l'appel. Il est défini dans l'exemple de code que vous avez publié, donc je suppose que c'est le problème.Vos instructions inserts attendent un tableau lorsqu'elles font référence à des clés.
Par exemple.
..mais vous pourriez en fait récupérer un objet
term_exists
.Un moyen rapide de déterminer si c'est le problème serait de mettre à jour cette ligne.
à..
Si j'ai raison et que c'est le problème, cela devrait le résoudre, même si je n'appellerais pas cela une solution élégante.
J'espère que c'est la réponse / l'aide que vous cherchiez .. :)
la source
Merci. Cette question a beaucoup aidé. Je me débattais avec des tests unitaires et j'ai trouvé que je devais faire
après avoir ajouté mes catégories de niveau supérieur, puis recommencez après avoir ajouté les catégories de deuxième niveau pour permettre à wordpress de tout effacer et de laisser passer les tests unitaires. Cela fonctionne autour de la nécessité d'un "deuxième chargement de page / rafraîchissement supplémentaire" mentionné dans une autre réponse ici.
la source
ma solution:
(peut-être était-il nécessaire de nettoyer les enregistrements du cache ..)
la source
Juste une dernière mise à jour: cela a été corrigé tout le long du WP 3.9: https://core.trac.wordpress.org/ticket/14485
la source