COMMENT_Form()生成错误的操作URL

时间:2016-02-19 作者:Josh C

我创建了文件comments.php. 在它里面,我有一个手动循环用于我的评论部分。I循环自offset = 0 + ((page - 1) * total_peroffset + total_per). 问题是,当我添加新评论时,评论表单的操作字段的URL生成错误。因此,它会转到评论的最后一页(即最旧的一页)。

关于这一点,我有一个问题,我之前发布过。然而,在跟踪周围的一些WP源代码后,我能够找到更多信息,所以我删除了原始代码。

如何确保主题的评论表单在不进行编辑的情况下生成正确的操作URLwp-includes/comment-template.phpwp-comments-post.php?

Line 734 在里面wp-includes/comment-template.php 是导致问题的原因。我不明白为什么。我将主题改为复制cpage,因此我不再干扰任何预期状态。我所知道的是,我可以通过破解核心文件中的行来解决我的问题。此更改使生成的URL转到正确的位置。

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

原来是这个。

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

只有当选项设置为“最旧”时,才会忽略URL的cpage值,这对我来说没有意义。我认为应该考虑在任何一种情况下何时忽略cpage。但事实并非如此,为什么它硬编码为只考虑顶部最旧的页面,而默认页面设置为最旧,而cpage位于第1页?这毫无意义!

我在做什么get_comment_link()generate the wrong page 价值有没有一种方法可以让我轻松地调试这些东西?我尝试在核心代码中添加回声,但没有出现。

这是我所有评论表单相关的源代码。(我忘了为我的函数“wbs”添加名称空间,因为我无法编辑它的粘贴箱,所以我使用了想象力的力量。comments.php(top) and functions.php(bottom) at http://pastebin.com/aer07uvF

抱歉,我只能发布2个链接(<;10代表。

编辑:

Socomment_form() 生成correct URL, 因为注释第1页should 总是有最早的注释。

1 个回复
最合适的回答,由SO网友:Josh C 整理而成

默认情况下,WordPress从oldest to newest. 即使Settings-Discussion 选项已修改。这是症结所在,人们可能会怀疑更改这些设置以重新组织评论页面,但事实并非如此。这些设置基本上定义了default comment loop, 以及何时显示哪个页面$cpage 为空。

明确地说,何时$cpage 为空表示您位于帖子URL上,而不是该帖子中的评论页面。

这意味着,问题不在于获取链接,因为代码不是动态的。问题在于如何显示注释。有两种选择\'default_comments_page\'\'comment_order\' 每个都有两个设置four configurations. 每个都需要唯一的偏移计算。在下面的代码中,您可以看到在正确的页面上显示正确注释所需的偏移量计算。

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);
}