Paramètres

$post_id(int)optionnel

Id du poste. La valeur par défaut n'est pas l'id de la variable global $post.

Valeur par défaut : 0

$tags(string|array)optionnel

Un tableau de termes à associer à un poste, ou une chaîne de termes séparés par des virgules. Les taxonomies hiérarchiques doivent toujours passer des ids plutôt que des noms puisque les termes enfants peuvent avoir le même nom qu'un parent.

Valeur par défaut : ''

$taxonomy(string)optionnel

Nom de la taxonomie.

Valeur par défaut : 'post_tag'

$append(bool)optionnel

Si true, ne supprime pas la relation des termes existants avec le poste. Si false, supprime la relation avec les termes existants et les remplace par les nouveaux.

Valeur par défaut : false

Description / Informations supplémentaires

Cette fonction ne fonctionne que sur les postes natifs. Pour des types de poste personnalisés, utilisez wp_set_object_terms().

Si $tags est laissé vide, les termes du poste seront dissociés pour la taxonomie donnée.

Retourne

(array|false|WP_Error) Tableau d'ids (term_taxonomy_id) des termes nouveaux termes associés. WP_Error ou false si échec.

Déclaration et structure de la fonction wp_set_post_terms()

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\0\x0B," ) );
    }

    /*
     * 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 );
}
_x()

Retourne une chaîne traduite en fonction de son contexte.

wp_set_object_terms()

Créer une relation entre un objet donné et un terme.

is_taxonomy_hierarchical()

Détermine si la taxonomie est hiérarchique.

Où est utilisée la fonction wp_set_post_terms() dans le CMS WordPress

Exemples

Ajouter un terme non hiérarchique :
$tag = '5';
// Mauvais. Le terme sera ajouté avec le nom '5'.

$tag = 5;
// Mauvais. La aussi le terme sera ajouté avec le nom '5'
// car les valeurs qui ne sont pas passées dans un tableau seront converties en chaîne.

$tag = array( '5' );
// Mauvais. La aussi le terme sera ajouté avec le nom '5'.

$tag = array( 5 );
// Correcte.

wp_set_post_terms( $post_id, $tag, $taxonomy );
Ajouter un terme hiérarchique :
// Pour obtenir l'id du terme vous pouvez utiliser :
$term_id = term_exists( $term, $taxonomy, $parent );

// Vous pouvez aussi passer la taxonomie par référence :
wp_set_post_terms( $post_id, $term, &$taxonomy );

Sources

Codex WordPress : wp_set_post_terms()

Autres fonctions dans le même fichier : wp-includes/post.php

Retour