web-dev-qa-db-fra.com

Pourquoi WordPress redirige-t-il les utilisateurs vers les publications après les commentaires?

Après avoir commenté l'un de mes messages, WordPress me redirige vers un autre message au hasard. Ce n’est qu’après, lors de la vérification du message précédent, que je vois que mon commentaire a été posté. Pourtant, pourquoi WordPress m'envoie-t-il à un message aléatoire après avoir commenté?

Voici mon fichier comments.php et voici mon site Web (veuillez ne pas ne le publie nulle part ailleurs, comme je le lance demain). N'hésitez pas à tester les commentaires, cependant. Je vais effacer alors avant de le lancer. Aucune suggestion?

PS: Je n’utilise aucun plugin et le bug ne fonctionne pas sur d’autres thèmes. En outre, j'utilise de jolis /%postname%/ permaliens.

1
João

Vous faites quelque chose qui affecte la valeur de la variable principale $ post de manière incorrecte.

Le modèle WordPress consiste en une boucle principale. Cette boucle, sur une seule page de publication, affiche la seule publication (ou page).

Lorsque le formulaire de commentaires est exécuté, il s'attend à ce que le dernier message de la boucle soit celui sur lequel vous commentez. Cependant, si vous jouez avec la boucle principale après coup (par exemple, en effectuant une autre requête query_posts () ou en modifiant la variable globale $ post de quelque manière que ce soit), alors vous allez perdre un peu ce qui vous manque. C'est ce qui se passe sur vos posts.

Si vous regardez la source de http://joaoramos.org/sala-de-ser/ , vous verrez que le numéro d'identification de ce message est 635. , mais le formulaire de commentaires indique 630. Je suis surpris que les commentaires aillent aux bonnes pages.

Plus précisément, ce qui se passe ici, c’est que votre barre latérale ne fait que mal. Si vous remarquez, la dernière entrée de votre barre latérale correspond à http://joaoramos.org/via/ qui, numéro BTW, correspond au numéro de publication 630. .

Lorsque vous créez des boucles secondaires, vous devez créer de nouveaux objets WP_Query au lieu de modifier l'objet principal et . Votre boucle ne doit pas modifier les variables globales, si possible.

Pas de solution miracle à celui-ci. Réécrivez votre barre latérale pour ne pas gâcher la boucle principale.

Edit: Je ne savais pas à propos de celui-ci. Il suffit d’ajouter un appel à wp_reset_postdata () après l’exécution des boucles de la barre latérale pour corriger les informations $ post globales sur ce qu’elles devraient être.

3
Otto

La redirection après le traitement du commentaire est effectuée en suivant les lignes de code dans wp-cmments-post.php:

$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
$location = apply_filters('comment_post_redirect', $location, $comment);

wp_redirect($location);

Donc, il y a trois façons que cela peut aller mal:

  • L'identifiant du commentaire qui vient d'être créé est incorrect;
  • les données de formulaire soumises contiennent un emplacement de redirection personnalisé;
  • l'emplacement est filtré et modifié.

D'après les informations que vous avez fournies, il n'est pas vraiment possible de deviner lequel de ces problèmes pourrait être en cause.

1
Rarst

Je suis tombé dans le même problème et j'ai également résolu ce problème. Vous avez probablement effectué une requête supplémentaire sur le fichier single.php. Vous semblez avoir manqué d'utiliser la fonction wp_reset_postdata() après avoir terminé votre boucle de publication. Veuillez vérifier votre code dans single.php

0
Eh Jewel