Mon code de plugin est ci-dessous. Dans la fonction myPlugin_cleanup (), je crée des catégories et assigne l'identifiant du terme 1 en tant que parent.
En raison du bogue connu avec la création de catégories via un script (le tableau category_children n'est pas créé et les résultats en cas d'erreur fatale lors de l'accès à des pages contenant des listes de catégories), j'ai placé l'appel clean_term_cache () directement sous la fonction qui crée mes catégories.
Cependant, cela ne fonctionne pas. L'option category_children n'est pas créée.
Fait intéressant, si je crée un plug-in dont la seule fonction est d'exécuter l'appel clean_term_cache ('', 'category'), cela résout le problème et crée l'option category_children avec les valeurs correctes.
Je ne sais pas pourquoi il ne fonctionne pas dans le même plugin que celui qui crée les catégories.
Que pourrais-je manquer?
function myPlugin_activate(){
if ( get_option( 'myPlugin_activated' ) !== "1"){
//comment out any function you don't want to run
myPlugin_copy('themes');
myPlugin_copy('plugins');
myPlugin_images();
myPlugin_options();
myPlugin_settings();
myPlugin_widgets();
myPlugin_links();
myPlugin_posts();
myPlugin_pages();
myPlugin_custom_menus();
myPlugin_cleanup();
clean_term_cache('','category'); //does not work here
update_option('myPlugin_activated', "1");
}
}
function myPlugin_cleanup(){
//include dependencies
require_once(ABSPATH.'/wp-admin/includes/taxonomy.php');
if(!get_cat_ID('nofollow')){wp_create_category('nofollow',1);}
if(!get_cat_ID('noindex')){wp_create_category('noindex',1);}
clean_term_cache('','category'); //Does not appear to work here either.
}
register_activation_hook(__FILE__, 'myPlugin_activate');
?>
Après avoir créé environ 40 installations de test WP aujourd'hui sur localhost, voici ce que je peux signaler:
Il semble que l'appel de fonction correct pour reconstruire les options category_children est:
_get_term_hierarchy('category')
Auparavant, j'essayais d'appeler:
clean_term_cache('','category')
Et je l’appelais juste après la création de mes catégories dans mon code de plugin. Cependant, je ne pourrais jamais obtenir cette fonction pour faire quoi que ce soit lorsqu'elle est appelée à partir du même plugin que j'utilise pour créer les catégories. Fait intéressant, je pourrais placer la fonction dans un plug-in autonome et l'exécuter (après mon plug-in de création de catégorie) afin de reconstruire à la perfection le tableau d'options category_parents.
La raison pour laquelle il ne peut pas être appelé dans le même script qui crée les catégories semble être liée à un comportement particulier de clean_term_cache () qui est mieux énoncé par "foofy" dans un commentaire dans le ticket de suivi de bogues :
Ce n'est un problème que si vous apportez plusieurs modifications de terme dans la même durée de vie PHP request/script. clean_term_cache () suit chaque taxonomie nettoyée dans une variable statique et ne la nettoie pas une seconde fois. Si plusieurs modifications de terme sont effectuées dans la même demande, l'option {$ taxonomy} _children reste avec la hiérarchie telle qu'elle était après la première modification.
J'espère que ça aidera quelqu'un!
Je dois faire ceci:
$taxnomy_name = ...;
clean_term_cache ( _get_term_hierarchy($taxnomy_name), $taxnomy_name);