WordPress : Utilisation de wp_set_object_terms (créer une relation entre les objets et les taxonomies)
wp_set_object_terms(int $object_id, str […]
wp_set_object_terms( int $object_id, string|int|array $terms, string $taxonomy, bool $append = false )
一、参数
$object_id
对象ID,比如post ID。
$terms
问题主要在这儿。
如果数据类型是字符串,就会把这个字符串作为slug,如果这个slug的term存在,则创建对象和这个term的关系,如果不存在,则先创建这个slug的term,然后创建对象和这个term的关系。
如果数据类型是整型,就会把这个值作为term的ID,如果这个ID的term存在,就会关联这个term。
如果数据类型是数组,无论怎么试,我都无法创建对象和term的关系。所以,对于数组,我是用foreach循环创建每一个关系的。
$taxonomy
分类法的slug,字符串。
$append
如果是false,则将原本的对象和term的关系覆盖更新。如果是true,则新建一条,即,对象和同一个taxonomy新增了一个term的关系。
二、代码
foreach ($custom_terms as $key => $value) {
if (is_array($value)) {
foreach ($value as $k => $v) {
wp_set_object_terms($postid,(int)$v,$key,true);
//同一个taxonomy($key),使用true,将数组中所有的term和对象分别创建关系。
}
}else{
wp_set_object_terms($postid,(int)$value,$key);
//从接口传来的数据都是字符串,为了保证$value是整形,使用了(int)。
}
}
三、返回
(array|WP_Error) Term taxonomy IDs of the affected terms or WP_Error on failure.
四、总结
WordPress的很多函数的参数,和wp_set_object_terms的参数一样,既可以使用字符串,也可以使用数字,甚至也可以使用数组的。但,从我自己的经验上来说,原则上,能用数字ID的,就尽量使用数字ID,能不用数组的就不用数组。这样,往往会减少一些麻烦。