comment_form () genera la url de acción incorrecta

4

Creé el archivo comments.php . Dentro tengo un bucle manual para la sección de comentarios. Hago un bucle desde offset = 0 + ((page - 1) * total_per a offset + total_per) . El problema es que cuando agrego nuevos comentarios, el campo de acción del formulario de comentarios tiene la URL incorrecta generada. En consecuencia, va a la última página de comentarios (es decir, la más antigua).

Tenía una pregunta con respecto a esto que publiqué anteriormente. Sin embargo, después de rastrear parte del código fuente de WP, pude encontrar más información, así que eliminé el original.

¿Cómo puedo garantizar que el formulario de comentarios de mi tema genere la URL de acción correcta sin editar wp-includes/comment-template.php o wp-comments-post.php ?

Línea 734 en wp-includes/comment-template.php está causando el problema. Aunque no entiendo por qué. Cambié mi tema para copiar cpage, por lo que ya no estoy jugando con ningún estado esperado. Lo que sí sé es que puedo resolver mi problema cortando la línea en el archivo principal. Este cambio hace que la URL generada vaya a la ubicación correcta.

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

Originalmente esto.

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

No tiene sentido para mí que ignore el valor de cpage para la URL, SOLAMENTE si la opción está configurada como "la más antigua". Creo que debería considerar cuándo ignorar cpage en cualquiera de las situaciones. Sin embargo, no lo hace, ¿por qué es difícil tener en cuenta que solo se debe considerar cuando es la más antigua en la parte superior tiene la página predeterminada establecida en la más antigua y cpage está en la página 1? ¡Esto no tiene sentido!

¿Qué estoy haciendo para hacer que get_comment_link() genere el valor incorrecto de la página ? ¿Hay alguna manera para que yo pueda depurar fácilmente estas cosas? Intenté agregar ecos al código principal, pero no aparecieron.

Aquí está todo el código fuente relacionado con mi formulario de comentarios. (Olvidé agregar el espacio de nombres para mis funciones "wbs", usar el poder de la imaginación porque no puedo editar el pastebin de este. comments.php (arriba) y functions.php (abajo) en http://pastebin.com/aer07uvF

Lo siento, solo puedo publicar 2 enlaces con < 10 rep.

editar:

Entonces, comment_form() genera la URL correcta , porque el comentario-página-1 debería tener siempre los comentarios más antiguos.

    
pregunta Josh C 19.02.2016 - 02:26

1 respuesta

2

Por defecto, WordPress organiza las páginas de comentarios de más antiguas a las más recientes . Esto no cambia, incluso si las opciones Settings-Discussion se han modificado. Este es el punto de bloqueo, uno podría sospechar que cambia esta configuración para reorganizar las páginas de comentarios, no . Básicamente, estas configuraciones definen el orden de los comentarios en el bucle de comentarios predeterminado , y qué página se muestra cuando $cpage está vacío.

Para que quede claro, cuando $cpage está vacío, significa que estás en la URL de publicación y no en una página de comentarios dentro de esa publicación.

Esto significa que el problema no está en obtener los enlaces, ya que el código no es dinámico. El problema está en cómo se muestran los comentarios. Hay dos opciones 'default_comments_page' y 'comment_order' cada una tiene dos configuraciones, lo que hace cuatro configuraciones . Cada uno necesita un cálculo de compensación único. En este código a continuación, puede ver los cálculos de compensación necesarios para mostrar los comentarios correctos en las páginas correctas.

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

Lea otras preguntas en las etiquetas