wp_update_term не создает новую уникальную пулю

Я хочу, чтобы slug воссоздавался каждый раз, когда имя имени обновляется, чтобы оно точно отражало имя.

wp_update_term(10, 'artists', array('name' => 'my new name')); 

Документация для wp_update_term гласит:

Если аргумент «slug» в $ args отсутствует, тогда будет использоваться «имя» в $ args. Следует также отметить, что если вы установите «slug» и не уникальны, тогда WP_Error будет передан обратно. Если вы не пропустите ни одного слизня, то для вас будет создан уникальный.

Пул, который уже существует и уже установлен в "my-old-name" , не обновляется до "my-new-name" когда я запускаю указанную выше функцию.

Это предназначено? Нужно ли мне вручную кодировать генерацию пула и самостоятельно менять его в аргументах?

Solutions Collecting From Web of "wp_update_term не создает новую уникальную пулю"

Я думаю, что у вас возникают проблемы с этими строками в wp_update_term() :

 3287 // Merge old and new args with new args overwriting old ones. 3288 $args = array_merge($term, $args); 

https://core.trac.wordpress.org/browser/tags/4.1.1/src/wp-includes/taxonomy.php#L3287

Массив, полученный в результате, объединяется с данными, уже находящимися в БД.

Задайте свой пул явно:

 $nname = 'my new name'; wp_update_term( 10, 'artists', array( 'name' => $nname, 'slug' => sanitize_title($nname) ) ); 

sanitize_title() – это те же функции, что и wp_update_term() чтобы преобразовать имя в пул:

 3309 $empty_slug = false; 3310 if ( empty( $args['slug'] ) ) { 3311 $empty_slug = true; 3312 $slug = sanitize_title($name); 3313 } else { 3314 $slug = $args['slug']; 3315 } 

https://core.trac.wordpress.org/browser/tags/4.1.1/src/wp-includes/taxonomy.php#L3312

Однако это не будет автоматически предотвращать повторяющиеся термины. wp_insert_term() функция wp_unique_term_slug() использует wp_unique_term_slug() .

 2844 $slug = wp_unique_term_slug( $slug, (object) $args ); 

https://core.trac.wordpress.org/browser/tags/4.1.1/src/wp-includes/taxonomy.php#L2844

Поэтому использование этого вместо sanitize_title() в коде выше должно делать трюк.