web-dev-qa-db-fra.com

Ajouter un modèle de commentaire de nom de classe à partir de functions.php

Je souhaite ajouter un nom de classe supplémentaire à mon comment template (le wrapper div avant la publication elle-même), qui est indiqué dans functions.php. Le nom de classe dans functions.php est un champ supplémentaire dans la section de profil de mon utilisateur et je souhaite obtenir cette chaîne et l'ajouter en tant que nom de classe supplémentaire dans mon modèle de commentaire.

La chose que je veux ajouter: $cityofuser->user_city

La question est: comment je fais ça? Si j'utilise $classes[] = 'comment-author-' . sanitize_html_class(echo $cityofuser->user_city); dans un modèle, cela ne fonctionnera pas. J'ai des erreurs comme syntax error, unexpected 'echo'

Modifier:

Dans mon formulaire de registre, les utilisateurs peuvent ajouter des informations dans un nouveau champ, en indiquant leur ville de résidence. Je souhaite obtenir la sortie de ce champ, en faire un nouveau nom de classe dans le modèle de commentaire et modifier l'arrière-plan des utilisateurs sur ce nom de classe. Donc, le custom field echo $cityofuser->user_city que j'ai créé (dans functions.php) et ajouté à mes pages de registre est quelque chose que je souhaite utiliser dans tout mon site.

Je veux ajouter le nouveau nom de classe ici: <div id="comment-5" class="comment byuser comment-author-admin even thread-odd thread-alt depth-1">

Et après cela, également sur les poteaux. Ce doit être quelque chose comme get_post_author?=cityofuser=Montreal ou quelque chose, mais je ne sais pas comment faire.

1
Siyah

Vous devriez envisager de vous connecter aux filtres comment_class() et post_class() , si votre thème le soutient.

Utilisation du filtre comment_class:

Nous pouvons ajouter le filtre suivant:

/**
 * Add a custom comment class, based on a given comment author's user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( 'comment_class', function( $classes, $class, $comment_id, $post_id ) {

    // Custom user meta key:
    $key = 'city';           // <-- Edit this to your needs!

    // Fetch the comment object:
    $comment = get_comment( $comment_id );

    // Check if the comment author is a registered user:
    if ( ! is_null( $comment ) && $comment->user_id > 0 )
    {
        // Check for the custom user meta:
        if( '' !== ( $value = get_user_meta( $comment->user_id, $key, true ) ) )
            $classes[] = sanitize_html_class( $value );
    }

    return $classes;
}, 10, 4 );

Exemple de sortie:

<li class="comment byuser comment-author-someuser bypostauthor 
           odd alt depth-2 reykjavik" id="li-comment-78">
    <article id="comment-78" class="comment">

où la reykjavik a été ajoutée en tant que méta utilisateur de la ville , pour l'auteur du commentaire donné.

Utilisation du filtre post_class:

De même pour le filtre post_class, on peut utiliser:

/**
 * Add a custom post class, based on a given post author's user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( 'post_class', function( $classes, $class, $post_id ) {

    // Custom user meta key:
    $key = 'city';           // <-- Edit this to your needs!

    // Fetch the comment object:
    $post = get_post( $post_id );

    if( ! is_null( $post ) && $post->post_author > 0 )
    {
        // Check for the custom user meta:
        if( '' !== ( $value = get_user_meta( $post->post_author, $key, true ) ) )
            $classes[] = sanitize_html_class( $value );

    }

    return $classes;
}, 10, 3 );

Voici une version plus courte qui fonctionne dans la boucle:

/**
 * Add a custom post class, based on a given post author's user meta field.
 *
 * @see http://wordpress.stackexchange.com/a/170443/26350
 */

add_filter( 'post_class', function( $classes, $class, $post_id ) {

    // Custom user meta key:
    $key = 'city';           // <-- Edit this to your needs!

    // Check for the custom user meta:
    if( '' !== ( $value = get_the_author_meta( $key ) ) )
        $classes[] = sanitize_html_class( $value );

    return $classes;
});

Exemple de sortie:

<article id="post-1" 
         class="post-1 post type-post status-publish format-standard 
                hentry category-uncategorized reykjavik">

où la reykjavik a été ajoutée en tant que dernière classe de publication, en fonction de notre filtre ci-dessus.

3
birgire