WordPress: Usage of wp_set_object_terms (create relationship between objects and taxonomies)
wp_set_object_terms( int $object_id, string|int|array $terms, string $taxonomy, bool $append = false )
1. Parameters
$object_id
Object ID, such as post ID.
$terms
The main problem lies here.
If the data type is a string, the string will be used as a slug. If the term of the slug exists, a relationship between the object and the term will be created. If it does not exist, the term of the slug will be created first, and then the object and the term will be created. Relationship.
If the data type is an integer, this value will be used as the ID of the term. If the term with this ID exists, this term will be associated.
If the data type is an array, no matter what I try, I cannot create a relationship between the object and the term. So, for arrays, I use a foreach loop to create each relationship.
$taxonomy
Taxonomy slug, string.
$append
If it is false, the relationship between the original object and term will be overwritten and updated. If it is true, a new relationship is created, that is, a new term relationship is added between the object and the same taxonomy.
2. Code
foreach ($custom_terms as $key => $value) { if (is_array($value)) { foreach ($value as $k => $v) { wp_set_object_terms($postid,(int)$v,$key,true); //Same taxonomy ($key) , use true to create relationships between all terms and objects in the array. } }else{ wp_set_object_terms($postid,(int)$value,$key); //The data transmitted from the interface are all strings. In order to ensure that $value is an integer, (int) is used. } }
3. Return
(array|WP_Error) Term taxonomy IDs of the affected terms or WP_Error on failure.
4. Summary
The parameters of many WordPress functions, like the parameters of wp_set_object_terms, can use either strings, numbers, or even arrays. However, from my own experience, in principle, if you can use digital IDs, try to use digital IDs, and if you can do without arrays, don't use arrays. In this way, some troubles will often be reduced.