在创建术语的同一插件中调用CLEAN_TERM_CACHE()失败,单独调用时成功吗?

时间:2011-04-19 作者:Scott B

我的插件代码如下。在myPlugin\\u cleanup()函数中,我创建了一些类别,并将术语id 1指定为父级。

由于known bug with creating categories via script (无法创建category\\u children数组,并且在访问包含类别列表的页面时会导致致命错误),我将clean\\u term\\u cache()调用直接放置在创建类别的函数下方。

然而,它不起作用。未创建category\\u children选项。

有趣的是,如果我创建一个插件,其唯一功能是执行clean\\u term\\u cache(“”,\'category\')调用,那么它可以解决问题,并使用正确的值创建category\\u children选项。

我只是不知道为什么它不能在创建类别的同一个插件中工作。

我可能会错过什么?

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 个回复
最合适的回答,由SO网友:Scott B 整理而成

今天在localhost上安装了大约40个测试WP之后,我可以报告以下内容:

重建category\\u子选项的正确函数调用似乎是:

_get_term_hierarchy(\'category\')
之前,我想打电话:

clean_term_cache(\'\',\'category\')
在我的插件代码中创建了类别之后,我就调用了它。然而,当从我用来创建类别的同一个插件调用此函数时,我永远无法让它做任何事情。有趣的是,我可以将该函数放置在一个独立的插件中并运行它(在我的类别创建插件之后),它将完美地重建category\\u parents options数组。

无法在创建类别的同一脚本中调用它的原因似乎与clean\\u term\\u cache()的一种特殊行为有关,该行为最好在the bug track ticket:

只有在同一PHP请求/脚本生存期内进行多个术语更改时,这才是一个问题。clean\\u term\\u cache()在静态变量中跟踪它清理的每个分类法,不会再次清理。如果在同一个请求中进行了多个术语更改,则{$taxonomy}\\u子选项将保留层次结构,与第一次更改后一样。

我希望这对某人有帮助!

SO网友:dlopezgonzalez

I have to do this:

$taxnomy_name = ...;
clean_term_cache ( _get_term_hierarchy($taxnomy_name), $taxnomy_name);
结束

相关推荐

在WordPress中筛选分类术语的Get_Categories()

我只想在(自定义)帖子属于某个类别且region=该帖子的$name时显示该类别。因此,例如,我有一个自定义帖子(类型“business”),在子类别“pizzerias”(父类别“food”)和区域“Rotterdam”(自定义分类:“region”,自定义分类术语:“Rotterdam”)中分别命名为“Mamma Mia”。=>显示类别“pizzerias”(和父类别“food”)只是,我不知道如何做到这一点。如果你能帮我解决这个难题,我将不胜感激。<?php // $