WordPress Version: 6.1
/**
* Sets the terms for a post.
*
* @since 2.8.0
*
* @see wp_set_object_terms()
*
* @param int $post_id Optional. The Post ID. Does not default to the ID of the global $post.
* @param string|array $terms Optional. An array of terms to set for the post, or a string of terms
* separated by commas. Hierarchical taxonomies must always pass IDs rather
* than names so that children with the same names but different parents
* aren't confused. Default empty.
* @param string $taxonomy Optional. Taxonomy name. Default 'post_tag'.
* @param bool $append Optional. If true, don't delete existing terms, just add on. If false,
* replace the terms with the new terms. Default false.
* @return array|false|WP_Error Array of term taxonomy IDs of affected terms. WP_Error or false on failure.
*/
function wp_set_post_terms($post_id = 0, $terms = '', $taxonomy = 'post_tag', $append = false)
{
$post_id = (int) $post_id;
if (!$post_id) {
return false;
}
if (empty($terms)) {
$terms = array();
}
if (!is_array($terms)) {
$comma = _x(',', 'tag delimiter');
if (',' !== $comma) {
$terms = str_replace($comma, ',', $terms);
}
$terms = explode(',', trim($terms, " \n\t\r\x00\v,"));
}
/*
* Hierarchical taxonomies must always pass IDs rather than names so that
* children with the same names but different parents aren't confused.
*/
if (is_taxonomy_hierarchical($taxonomy)) {
$terms = array_unique(array_map('intval', $terms));
}
return wp_set_object_terms($post_id, $terms, $taxonomy, $append);
}