WP_UPDATE_TERM不创建新的唯一插件

时间:2015-04-09 作者:Jacob Raccuia

我希望每次更新术语名称时都重新创建slug,以便它准确地反映名称。

wp_update_term(10, \'artists\', array(\'name\' => \'my new name\'));          
的文档wp_update_term 表示:

如果$args中缺少“slug”参数,则将使用$args中的“name”。还应该注意的是,如果您设置了“slug”,并且它不是唯一的,那么将传回一个WP\\u错误。如果您没有通过任何slug,那么将为您创建一个唯一的slug。

slug已存在并已设置为"my-old-name" 不更新为"my-new-name" 当我运行上述函数时。

这是有意的吗?我是否需要手动编写slug生成代码并在参数中自己更改它?

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

我想你的这些线路有问题了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

传入的数组与数据库中已有的数据合并。

明确设置slug:

$nname = \'my new name\';
wp_update_term(
  10, 
  \'artists\', 
  array(
    \'name\' => $nname,
    \'slug\' => sanitize_title($nname)
  )
);   
sanitize_title() 与所使用的函数相同wp_update_term() 要将名称转换为slug,请执行以下操作:

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() 相反

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() 在上面的代码中应该做到这一点。

结束

相关推荐

Get_Terms()返回空数组

我已经阅读了所有关于显示自定义分类法术语的帖子,但它仍然不起作用。好的,下面是代码:<?php //part of template-offer.php $taxonomy = \'brand\'; $term_args=array( \'hide_empty\' => false, \'orderby\' => \'name\', \'order\' => \'ASC\' ); $tax_terms =