编程添加子术语-没有警告,但也没有骰子

时间:2013-10-10 作者:Brandt Solovij

下面是我正在做的事情:

create_taxonomy_record(array(
            \'Label\',
            \'tax_parent_slug\',
            \'Label Related\',
            \'this_tax_term_slug\'));
/* ---> Create a child */
            create_taxonomy_record(array(
            \'Label 2\',
            \'this_tax_term_slug\',
            \'Label Related\',
            \'this_tax_term_slug_a_child\'));
这是一个名为create_taxonomy_record (非常普通-echos用于调试目的)

create_taxonomy_record($args)
        {

            $term = term_exists($args[0], $args[1]);
            if ($term == 0 || $term == null) {

                wp_insert_term(
                    $args[0], // the term
                    $args[1], // the taxonomy
                    array(
                        \'description\'=> $args[2],
                        \'slug\' => $args[3],
                        \'parent\'=> $args[1]
                        )
                );
            }
            else { echo "<h1>" . $args[0] . " exists in parent " . $args[1] ."</h1>";}
        }
所以这是行不通的,但失败也不难。我在上有警告/错误,而此代码两者都不提供。

What\'s Working:

<分类法中的所有第一层术语都注册良好(1->n,我已经对该函数的10k个调用运行了测试,所有调用都名义上执行)

What\'s Not Working:

<当我尝试将子术语指定给父术语时。我没有得到警告、失败或虚假的存在匹配,我只是什么都没有得到Now I did find this :

Inserting terms in an Hierarchical Taxonomy

然而,这似乎并没有解决这个问题。或者更确切地说,我可能是在错误地清除缓存。

我试图清除缓存的内容如下所示:

create_taxonomy_record(array(
                \'Label\',
                \'tax_parent_slug\',
                \'Label Related\',
                \'this_tax_term_slug\'));
    /* ---> Create a child */

/* Tried it here */
delete_option("this_tax_term_slug_children");
                create_taxonomy_record(array(
                \'Label 2\',
                \'this_tax_term_slug\',
                \'Label Related\',
                \'this_tax_term_slug_a_child\'));

/* and here - all permutations/ combinations should be considered attempted */
delete_option("this_tax_term_slug_children");
没有骰子。

1 个回复
最合适的回答,由SO网友:Eugene Manuilov 整理而成

因为你使用wp_insert_term 功能不正确。请阅读codex manual page 仔细看,您会发现第二个参数不是父slug,而是您的自定义分类法。

因此,您的函数应该如下所示:

create_taxonomy_record($args) {
    $parent_term = 0;
    if (!empty($args[2]) && ($parent_term = term_exists($args[2], $args[1])) {
       $parent_term = $parent_term[\'term_id\'];
    }

    $term = term_exists($args[0], $args[1]);
    if ($term == 0 || $term == null) {
        wp_insert_term(
            $args[0], // the term
            $args[1], // the taxonomy
            array(
                \'parent\'      => $parent_term,
                \'description\' => $args[3],
                \'slug\'        => $args[4],
            )
        );
    }

    else { echo "<h1>" . $args[0] . " exists in parent " . $args[1] ."</h1>";}
}
注意$args 数组,现在它应该有5个元素:

术语分类法父术语slug描述,您可以这样使用它:

create_taxonomy_record(array(
    \'Label\',
    \'your_custom_taxonomy_name_has_to_be_here\',
    0,
    \'Label Related\',
    \'this_tax_term_slug\',
));

/* ---> Create a child */

create_taxonomy_record(array(
    \'Label 2\',
    \'your_custom_taxonomy_name_has_to_be_here\',
    \'this_tax_term_slug\',
    \'Label Related\',
    \'this_tax_term_slug_a_child\'
));

结束

相关推荐

如何使用wp_set_Object_Terms为帖子设置分层术语

我有一个称为“位置”的分层自定义分类法。父类别是国家名称,子类别是国家下的领土。如何通过编程将这些术语附加到帖子?$country = \'Egypt\'; $territory = \'Hurghada\'; 因此,如果埃及类别不存在,我需要创建它,并且需要在埃及下的子类别中附加$territory。这就是我目前所处的位置:$post_id = 10; $country_term_id = term_exists( $country, \'locations\' );