web-dev-qa-db-fra.com

Afficher le contenu uniquement si un membre a laissé un commentaire

Fonctions Php:

add_shortcode( 'membervip', 'memberviparea' );
function memberviparea( $atts, $content = null ) {
    if( is_user_logged_in() ) return '<p>' . $content . '</p>';
    else return;
}

Poste:

[membre] Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.

Avec ce code, je peux afficher les liens uniquement aux membres connectés, mais je souhaite uniquement afficher les liens des membres connectés et ayant fait un commentaire.

Quel code peut faire cela?

4
M.UNLU

Vérifier si l'utilisateur a laissé un commentaire

// the user may have commented on *any* post
define( 'CHECK_GLOBAL_FOR_COMMENTS', TRUE );

//
// some more code
//

function memberviparea( $atts, $content = null ) {

    $post_id = 0;

    // if the user have to left a comment explicit on this post, get the post ID
    if( defined( 'CHECK_GLOBAL_FOR_COMMENTS' ) && FALSE === CHECK_GLOBAL_FOR_COMMENTS ) {
        global $post;

        $post_id = ( is_object( $post ) && isset( $post->ID ) ) ?
            $post->ID : 0;
    }

    if( is_user_logged_in() && user_has_left_comment( $post_id ) )
        return '<p>' . $content . '</p>';
    else
        return;

}

/**
 * Check if the user has left a comment
 *
 * If a post ID is set, the function checks if
 * the user has just left a comment in this post.
 * Otherwise it check if the user has left a comment on
 * any post.
 * If no user ID is set, the ID of the current logged in user is used.
 * If no user is currently logged in, the fuction returns null.
 *
 * @param int $post_id ID of the post (optional)
 * @param int $user_id User ID (required)
 * @return null|bool Null if no user is logged in and no user ID is set, else true if the user has left a comment, false if not
 */
function user_has_left_comment( $post_id = 0, $user_id = 0 ) {

    if( ! is_user_logged_in() && 0 === $user_id )
        return NULL;
    elseif( 0 === $user_id )
        $user_id = wp_get_current_user()->ID;

    $args = array( 'user_id' => $user_id );

    if ( 0 !== $post_id )
        $args['post_id'] = $post_id;

    $comments = get_comments( $args );

    return ! empty( $comments );

}

Cette fonction vérifiera si l'utilisateur a laissé un commentaire sur le message actuel . Si vous voulez vérifier si l'utilisateur a généralement laissé un commentaire (sur un message post), supprimez ou commentez cette ligne 'post_id' => $pid, // get only comments from this post and

Mettre à jour

Parce qu'une telle fonction pourrait être utile, je réécris un peu le code pour le rendre plus facile à réutiliser. Il est maintenant possible de vérifier si l'utilisateur a laissé un commentaire sur tout message ou sur un message spécifique en transmettant l'identifiant du message à la fonction.

7
Ralf912