WordPress : comment_form() génère la mauvaise URL d’action

Publié par Jean-Michel le

J’ai créé le fichier comments.php. À l’intérieur, j’ai une boucle manuelle pour ma section de commentaires. je boucle de offset = 0 + ((page - 1) * total_peràoffset + total_per). The problem is when I add new comments, the comment form’s action field has the wrong URL generate. It consequently goes to the very last page of comments (ie. the oldest).

J’avais une question à ce sujet que j’ai posté plus tôt. Cependant, après avoir retracé une partie du code source de WP, j’ai pu trouver plus d’informations, j’ai donc supprimé l’original.

Comment puis-je m’assurer que le formulaire de commentaire de mon thème génère la bonne URL d’action sans modification wp-includes/comment-template.phpou wp-comments-post.php?

La ligne 734 wp-includes/comment-template.phpest à l’origine du problème. Je ne comprends pas pourquoi cependant. J’ai changé mon thème pour copier cpage, donc je ne joue plus avec les états attendus. Ce que je sais, c’est que je peux résoudre mon problème en piratant la ligne dans le fichier core. Cette modification permet à l’URL générée d’accéder à l’emplacement correct.

if ( 'newest' === get_option( 'default_comments_page' ) )

Originally this.

if ( 'oldest' === get_option( 'default_comments_page' ) && 1 === $cpage )

It doesn’t make sense to me that it disregards the cpage value for the URL, ONLY if the option is set to ‘oldest’. I would think it should consider when to disregard cpage in either situation. It doesn’t though, why is it hard coded to only consider when it is Oldest at the top has the default page set to oldest, and cpage is at page 1? This makes no sense!

Qu’est-ce que je fais pour get_comment_link()générer la mauvaise valeur de page ? Existe-t-il un moyen pour moi de déboguer facilement ces choses? J’ai essayé d’ajouter des échos au code principal, mais ils ne sont pas apparus.

Voici tout mon code source lié au formulaire de commentaire. (J’ai oublié d’ajouter l’espace de noms pour mes fonctions « wbs », utilisez le pouvoir de l’imagination car je ne peux pas en modifier le pastebin. comments.php(top) et functions.php(bottom) à http://pastebin. com/aer07uvF

Désolé, je ne peux poster que 2 liens avec <10 rep.

Éditer:

Génère donc comment_form()l’ URL correcte , car la page de commentaire-1 doit toujours contenir les commentaires les plus anciens.

Solution n°1 trouvée

Par défaut, WordPress organise les pages de commentaires du plus ancien au plus récent . Cela ne change pas, même si les Settings-Discussionoptions ont été modifiées. C’est le point d’achoppement, on pourrait se douter de modifier ces paramètres pour réorganiser les pages de commentaires, non . Ces paramètres définissent essentiellement l’ordre des commentaires dans la boucle de commentaires par défaut et quelle page est affichée lorsqu’elle $cpageest vide.

Pour être clair, lorsque $cpageest vide, cela signifie que vous êtes sur l’URL de la publication et non sur une page de commentaire dans cette publication.

Cela signifie que le problème n’est pas d’obtenir les liens, car ce code n’est pas dynamique. Le problème est dans la façon dont les commentaires sont affichés. Il y a deux options 'default_comments_page'et 'comment_order'chacune a deux réglages, ce qui fait quatre configurations . Chacun nécessite un calcul de décalage unique. Dans ce code ci-dessous, vous pouvez voir les calculs de décalage nécessaires pour afficher les commentaires corrects sur les bonnes pages.

function grab_comments( $remainder, $page_total){
    global $cpage;
    $per_page = get_option('comments_per_page');
    $order_asc = get_option('comment_order') == 'asc';
    $order = $order_asc ? 'ASC' : 'DESC'; //Affects the offset

    if( get_option('default_comments_page') == 'newest' )
    {
        if ($cpage == '') $cpage = $page_total;

        if (get_option('comment_order') == 'desc')
        {
            // ; 8,7,6; 5,4,3; 2,1,0
            $offset = ( $page_total - $cpage ) * $per_page;
        }
        else
        {
            // ; 6,7,8; 3,4,5; 0,1,2
            $offset = ( ( $cpage - 1 ) * $per_page ) - ( $per_page - $remainder );
            if($offset < 0){
                $offset = 0;
                $per_page = $remainder != 0 ? $remainder : $per_page;
            }
        }
    }
    else // default page: 'oldest'
    {
        if ($cpage == '') $cpage = 1;

        if (get_option('comment_order') == 'asc')
        {
            // 0,1,2; 3,4,5; 6,7,8;
            $offset = ( $cpage - 1 ) * $per_page;
        }
        else
        {
            // 2,1,0; 5,4,3; 8,7,6;
            $offset = ( ( $page_total - $cpage ) * $per_page ) - ($per_page - $remainder);
            if($offset < 0){
                $offset = 0;
                $per_page = $remainder != 0 ? $remainder : $per_page;
            }
        }
    }
    $args = array(
        'post_id' => get_the_id()
        , 'number' => $per_page
        , 'offset' => $offset
        , 'order' => $order);
    return get_comments($args);
}

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *