Добавление детских терминов программно – без предупреждения, но без кубиков

Вот что я делаю:

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 (ее очень ваниль – эхо для целей отладки)

 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>";} } 

Так что это не работает, но также и не сложно. У меня есть предупреждения / ошибки, и этот код не обеспечивает ни того, ни другого.

Что работает:

  • Все термины 1-го уровня в таксономии регистрируются штрафом (1-> n, я проверил тесты против 10k звонков на эту функцию и все выполняют номинально)

Что не работает:

  • когда я пытаюсь назначить дочерний термин родительскому термину. Я не получаю предупреждение, неудачу или ложное совпадение существования, я просто ничего не получаю.

Теперь я нашел это:

Вставка терминов в иерархическую таксономию

Однако это не помогло решить проблему. Скорее всего, я ошибаюсь в кэше.

То, что я пробовал для кэширования, выглядело примерно так:

 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"); 

Нет кубиков.

Solutions Collecting From Web of "Добавление детских терминов программно – без предупреждения, но без кубиков"

Это не работает, потому что вы неправильно используете функцию wp_insert_term . Пожалуйста, внимательно прочитайте страницу руководства codex, и вы увидите, что второй аргумент не является родительским 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 элементов:

  1. Срок
  2. таксономия
  3. Родительский термин slug
  4. Описание
  5. Термин слизняк

И вы можете использовать его так:

 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' ));