comment_form () gera o URL de ação incorreto

4

Eu criei o arquivo comments.php . Dentro dele, tenho um loop manual para minha seção de comentários. Eu faço loop de offset = 0 + ((page - 1) * total_per para offset + total_per) . O problema é quando eu adiciono novos comentários, o campo de ação do formulário de comentário tem o URL errado gerado. Consequentemente, vai para a última página de comentários (ou seja, a mais antiga).

Eu tive uma pergunta sobre isso que eu postei anteriormente. No entanto, depois de traçar um pouco do código-fonte do WP, consegui encontrar mais informações, por isso apaguei o original.

Como posso garantir que o formulário de comentários do meu tema gere o URL de ação correto sem editar wp-includes/comment-template.php ou wp-comments-post.php ?

Linha 734 em wp-includes/comment-template.php está causando o problema. Eu não entendo porque. Eu mudei meu tema para copiar o cpage, então não estou mais mexendo com nenhum estado esperado. O que eu sei é que posso resolver meu problema hackeando a linha no arquivo principal. Essa alteração faz com que a URL gerada vá para o local correto.

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

Originalmente isso.

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

Não faz sentido para mim desconsiderar o valor do cpage para o URL, APENAS se a opção estiver definida como 'mais antiga'. Eu acho que deve considerar quando desconsiderar cpage em qualquer situação. No entanto, por que é difícil pensar apenas quando o é o mais antigo no topo tem a página padrão como a mais antiga, e o cpage está na página 1? Isso não faz sentido!

O que estou fazendo para fazer o get_comment_link() gerar o valor da página errada ? Existe uma maneira de depurar facilmente essas coisas? Tentei adicionar echos ao código principal, mas eles não apareceram.

Aqui está todo o código-fonte relacionado ao meu formulário de comentário. (Esqueci de adicionar o namespace para minhas funções "wbs", use o poder da imaginação porque não posso editar o pastebin dele. comments.php (em cima) e functions.php (em baixo) em http://pastebin.com/aer07uvF

Desculpe, só posso postar 2 links com < 10 representantes.

editar:

Portanto, comment_form() gera o URL correto , porque a página de comentários 1 deve sempre ter os comentários mais antigos.

    
por Josh C 19.02.2016 / 02:26

1 resposta

2

Por padrão, o WordPress organiza as páginas de comentários do mais antigo para o mais novo . Isso não muda, mesmo que as opções Settings-Discussion tenham sido modificadas. Este é o ponto de discórdia, pode-se suspeitar de alterar essas configurações para reorganizar as páginas de comentários, isso não acontece . Essas configurações, basicamente, definem a ordem dos comentários no loop de comentário padrão , e qual página é exibida quando $cpage está vazio.

Para ficar claro, quando $cpage estiver vazio, significa que você está no URL de postagem e não na página de comentários dessa postagem.

Isso significa que o problema não está em obter os links, pois esse código não é dinâmico. O problema está em como os comentários são exibidos. Existem duas opções 'default_comments_page' e 'comment_order' cada uma tem duas configurações, o que faz com quatro configurações . Cada um precisa de um cálculo exclusivo de deslocamento. Neste código abaixo, você pode ver os cálculos de compensação necessários para exibir os comentários corretos nas páginas corretas.

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);
}
    
por Josh C 19.02.2016 / 21:47