Pas de nouveau commentaire pour toi : sauf si c’est ton premier.

Pas de nouveau commentaire pour toi : sauf si c’est ton premier.

Quelle astuce se cache derrière ce titre … ? C’est simple :

Je souhaitais faire en sorte qu’une personne ayant déjà commenté un article ne puisse pas recréer un second commentaire parent dans ce même article.

Buuuuuuuut !

Le but est alors de forcer la personne à répondre à son propre premier commentaire.

J’ai utilisé ce code sur ma version 3 du site car à l’origine je ne chargeais que les 5 premiers commentaires parents et leurs réponses, le reste pouvait être chargé à la demande en ajax, solution abandonné au final, mais c’est un autre sujet.

J’ai gardé ce système car il me plait, tout bêtement !

Hooooooook !

J’utilise le hook preprocess_comment que j’avais déjà utilisé dans l’astuce pour empêcher l’usurpation d’identité dans les commentaires.

Il va me permettre de toucher aux données avant l’insertion en base. Je vais alors chercher si l’auteur du commentaire en question a déjà commenté cet article (je prends le premier, parent à 0), si oui, je prends son ID et je le force.

Son commentaire deviendra alors une réponse à son propre commentaire !

Seuls les admins peuvent créer de nouveaux parents, après tout, ils sont admins !

Coooooooode !

add_filter( 'preprocess_comment', 'baw_no_double_thread' );
function baw_no_double_thread( $comment )
{
	if ( current_user_can( 'administrator' ) ) {
		return $comment;
	}
	global $wpdb;
	if ( ! $comment['comment_parent'] ) {
		$c = $wpdb->get_var( $wpdb->prepare( 'SELECT comment_ID FROM '.$wpdb->comments.' WHERE comment_post_ID = %d AND comment_author_email = %s AND comment_parent = 0', $comment->comment_post_ID, $comment['comment_author_email'] ) );
		if ( (int) $c > 0 ) {
			$comment['comment_parent'] = $c;
		}
	}
	return $comment;
}

Boooonuuuus !

Vous aurez remarqué que le bouton « Répondre » est également sur le dernier niveau ?

Cette astuce vient de chez mon ami Greg, encore une fois, j’utilise son talent ici !

Alors, plus court pour une si grande efficacité non ?

Lire la suite

Vous aimez ? Partagez !

Abonnement gratuit à 0€


19 thoughts on “Pas de nouveau commentaire pour toi : sauf si c’est ton premier.”

  • 1
    Cristophe on 15 juillet 2014 Répondre
    Si mon premier commentaire a été fait à midi, que mon second commentaire est fait à 23h et qu’il fait suite à un débat entre tous les commentateurs entre midi et 23h, mon second commentaire va se retrouver juste après mon premier, n’est-ce pas un peu bête ?
    • 2
      Cristophe on 15 juillet 2014
      Je teste.
    • 3
      Cristophe on 15 juillet 2014
      Je re-teste.
    • 4
      Cristophe on 15 juillet 2014
      Si j’ai bien compris, cette solution n’est pas mise en place ici.
    • 5
      Cristophe on 15 juillet 2014

      Là j’ai testé l’arobase. Ça me plaît. d:-)
    • 6
      Julio Potier on 15 juillet 2014
      Euh si, tes commentaires suivants sont bien des réponses à ton premier commentaire, et non pas des nouveaux. Regarde, tu es légèrement indenté.
      Si tu as créé toi un commentaire à 12h, que dans ton commentaire les gens débattent jusqu’à 23h, si tu réponds à un commentaire, il sera alors, comme nativement, mis à la fin des commentaires de ton commentaire parent (le premier). Ça c’est natif.
      Par contre si tu as oublié de faire « répondre », alors je le forcerais, tu ne peux juste pas lancer 2 threads parents dans le même article.
      Rien ne t’empêche par contre de participer à X discussions en y répondant, tu es libre de le faire encore.
      Au passage, si tu es un admin, tu fais ce que tu veux :)
    • 7
      Cristophe on 15 juillet 2014

      Ah oui, je n’avais pas vu l’indentation. « Tu as de la merde dans les yeux » aurait dit la maman de mon papa.
  • 8
    sebastien on 21 juillet 2014 Répondre
    je lance un premier thread
    • 9
      sebastien on 21 juillet 2014
      je lance un second thread
    • 10
      sebastien on 21 juillet 2014
      et effectivement ça n’en est pas un
    • 11
      Julio Potier on 21 juillet 2014
      *magiiiie*
  • 12
    Julien Maury on 26 juillet 2014 Répondre
    Pourquoi tu passes par la globale $post alors que l’array $comment te donne déjà l’ID du post?
    • 13
      Julio Potier on 26 juillet 2014
      Tu as raison c’est déjà là, je prends ! Merci
    • 14
      Julien Maury on 26 juillet 2014
      Non mais j’obtiens une notice donc je voulais savoir si tu étais au courant et que justement c’était pour ça que tu n’utilisais pas l’array $comment. Apparemment l’objet n’existe pas oO
    • 15
      Julio Potier on 26 juillet 2014
      mmm pas logique car vu le core il est bien envoyé.
    • 16
      Julien Maury on 26 juillet 2014
      Bah avec la globale post pas de notice au wp_die(), pas le cas de l’array $comment. Incompréhensible ! Ta snippet marche elle?
    • 17
      Julio Potier on 26 juillet 2014
      Elle marche avec la globale, j’avoue ne pas avoir testé avec $comment tellement ça me semble fonctionner :O
  • 18
    Le MetalZineur on 21 mars 2015 Répondre
    Bonjour,

    Je ne comprends pas bien la subtilité:
    « Son commentaire deviendra alors une réponse à son propre commentaire ! »
    Est-ce qu’il y a un exemple de ce résultat ?

    Amicalement.

    • 19
      Julio Potier on 2 avril 2015
      Oui le premier commentaire de cet article. La personne a essayé de poster un nouveau fil de discussion, mais le script a forcé ce nouveau fil à devenir une réponse de son propre premier commentaire. (c’est tordu …)

Laisser un commentaire

Avant de parler, merci de lire la charte des commentaires.

Utiliser le tag [php][/php] pour ajouter du code ou utilisez un service comme pastebin.com.
Cibler un commentateur avec un "@", merci à Mention Comments Authors !