web-dev-qa-db-fra.com

L'appel de clean_term_cache () échoue lorsqu'il est appelé dans le même plugin qui crée des termes, réussit-il lorsqu'il est appelé séparément?

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');
?>
2
Scott B

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!

3
Scott B

Je dois faire ceci:

$taxnomy_name = ...;
clean_term_cache ( _get_term_hierarchy($taxnomy_name), $taxnomy_name);
0
dlopezgonzalez