Paramètres

$object_ids(int|int[])requis

Les IDs d'objet à récupérer.

$taxonomies(string|string[])requis

Les noms de taxonomie à partir desquels récupérer les termes.

$args(array|string)optionnel

Voir WP_Term_Query::__construct() pour les arguments supportés.

Valeur par défaut : array()

Description / Informations supplémentaires

On peut noter que les résultats de wp_get_object_terms() ne sont pas mis en cache. Pour une question de performance on peut utiliser get_the_terms() dont les résultats sont mis en cache.

Retourne

(WP_Term[]|int[]|string[]|string|WP_Error) Le tableau de termes, leur nombre sous forme de chaîne numérique ou WP_Error si l'une des taxonomies n'existe pas.

Voir WP_Term_Query::get_terms() pour plus d'informations.

Déclaration et structure de la fonction wp_get_object_terms()

function wp_get_object_terms( $object_ids, $taxonomies, $args = array() ) {
    if ( empty( $object_ids ) || empty( $taxonomies ) ) {
        return array();
    }

    if ( ! is_array( $taxonomies ) ) {
        $taxonomies = array( $taxonomies );
    }

    foreach ( $taxonomies as $taxonomy ) {
        if ( ! taxonomy_exists( $taxonomy ) ) {
            return new WP_Error( 'invalid_taxonomy', __( 'Invalid taxonomy.' ) );
        }
    }

    if ( ! is_array( $object_ids ) ) {
        $object_ids = array( $object_ids );
    }
    $object_ids = array_map( 'intval', $object_ids );

    $defaults = array(
        'update_term_meta_cache' => false,
    );

    $args = wp_parse_args( $args, $defaults );

    /**
     * Filters arguments for retrieving object terms.
     *
     * @since 4.9.0
     *
     * @param array    $args       An array of arguments for retrieving terms for the given object(s).
     *                             See {@see wp_get_object_terms()} for details.
     * @param int[]    $object_ids Array of object IDs.
     * @param string[] $taxonomies Array of taxonomy names to retrieve terms from.
     */
    $args = apply_filters( 'wp_get_object_terms_args', $args, $object_ids, $taxonomies );

    /*
     * When one or more queried taxonomies is registered with an 'args' array,
     * those params override the `$args` passed to this function.
     */
    $terms = array();
    if ( count( $taxonomies ) > 1 ) {
        foreach ( $taxonomies as $index => $taxonomy ) {
            $t = get_taxonomy( $taxonomy );
            if ( isset( $t->args ) && is_array( $t->args ) && array_merge( $args, $t->args ) != $args ) {
                unset( $taxonomies[ $index ] );
                $terms = array_merge( $terms, wp_get_object_terms( $object_ids, $taxonomy, array_merge( $args, $t->args ) ) );
            }
        }
    } else {
        $t = get_taxonomy( $taxonomies[0] );
        if ( isset( $t->args ) && is_array( $t->args ) ) {
            $args = array_merge( $args, $t->args );
        }
    }

    $args['taxonomy']   = $taxonomies;
    $args['object_ids'] = $object_ids;

    // Taxonomies registered without an 'args' param are handled here.
    if ( ! empty( $taxonomies ) ) {
        $terms_from_remaining_taxonomies = get_terms( $args );

        // Array keys should be preserved for values of $fields that use term_id for keys.
        if ( ! empty( $args['fields'] ) && str_starts_with( $args['fields'], 'id=>' ) ) {
            $terms = $terms + $terms_from_remaining_taxonomies;
        } else {
            $terms = array_merge( $terms, $terms_from_remaining_taxonomies );
        }
    }

    /**
     * Filters the terms for a given object or objects.
     *
     * @since 4.2.0
     *
     * @param WP_Term[]|int[]|string[]|string $terms      Array of terms or a count thereof as a numeric string.
     * @param int[]                           $object_ids Array of object IDs for which terms were retrieved.
     * @param string[]                        $taxonomies Array of taxonomy names from which terms were retrieved.
     * @param array                           $args       Array of arguments for retrieving terms for the given
     *                                                    object(s). See wp_get_object_terms() for details.
     */
    $terms = apply_filters( 'get_object_terms', $terms, $object_ids, $taxonomies, $args );

    $object_ids = implode( ',', $object_ids );
    $taxonomies = "'" . implode( "', '", array_map( 'esc_sql', $taxonomies ) ) . "'";

    /**
     * Filters the terms for a given object or objects.
     *
     * The `$taxonomies` parameter passed to this filter is formatted as a SQL fragment. The
     * {@see 'get_object_terms'} filter is recommended as an alternative.
     *
     * @since 2.8.0
     *
     * @param WP_Term[]|int[]|string[]|string $terms      Array of terms or a count thereof as a numeric string.
     * @param string                          $object_ids Comma separated list of object IDs for which terms were retrieved.
     * @param string                          $taxonomies SQL fragment of taxonomy names from which terms were retrieved.
     * @param array                           $args       Array of arguments for retrieving terms for the given
     *                                                    object(s). See wp_get_object_terms() for details.
     */
    return apply_filters( 'wp_get_object_terms', $terms, $object_ids, $taxonomies, $args );
}
wp_get_object_terms()

Retourne les termes associés aux ids d'objets donnés, en fournissant les taxonomies correspondantes.

get_terms()

Retourne les termes pour une taxonomie donnée ou une liste de taxonomies.

taxonomy_exists()

Détermine si un nom de taxonomie existe.

wp_parse_args()

Fusionne des arguments définis par l'utilisateur dans un tableau par défaut.

get_taxonomy()

Retourne l'objet d'une taxonomie en donnant son nom.

apply_filters()

Appel les fonctions qui ont été attachées à un filtre spécifique.

get_object_terms

Filtre les termes pour un ou plusieurs objets donnés.

wp_get_object_terms

Filtre les termes pour un ou plusieurs objets donnés.

wp_get_object_terms_args

Filtre les arguments pour récupérer les termes de l'objet.

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

Exemples

Renvoie une liste de tous les termes de la taxonomie "produit" appliqués à $post :
$product_terms = wp_get_object_terms( $post->ID,  'product' );

if ( ! empty( $product_terms ) ) {
    if ( ! is_wp_error( $product_terms ) ) {
        echo '<ul>';
            foreach( $product_terms as $term ) {
                echo '<li><a href="' . esc_url( get_term_link( $term->slug, 'product' ) ) . '">' . esc_html( $term->name ) . '</a></li>'; 
            }
        echo '</ul>';
    }
}
Exemple de produits associés :
$exclude_post_id = $post->ID;
$taxchoice = 'download_tag';

$custom_taxterms = wp_get_object_terms( $post->ID, $taxchoice, array('fields' => 'ids') );
$arguments = array(
    'post_type' => 'download',
    'post_status' => 'publish',
    'posts_per_page' => 3,
    'orderby' => 'rand',
    'ignore_sticky_posts' => 1,
    'post__not_in' => array($post->ID, '81099'),
    'ignore_sticky_posts'=>1,
    'tax_query' => array(
        array(
            'taxonomy' => $taxchoice,
            'field' => 'id',
            'terms' => $custom_taxterms
        )
    )
);

$post_query = new WP_Query($arguments);

Sources

Codex WordPress : wp_get_object_terms()

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

Retour