Respuestas de comentarios no enlazados con enlace al comentario original

10

Explicaré lo que estoy tratando de lograr.

Me gustaría tener comentarios regulares sin hilos (planos / clásicos) con un enlace de respuesta a cada comentario. Cuando alguien responde a un comentario, el comentario de respuesta terminará en la parte superior (o inferior) como el último comentario tal como lo haría en los comentarios predeterminados sin hilos, pero a diferencia del comentario predeterminado sin hilos, la respuesta debe mostrar un enlace a El comentario original / autor.

Hay una solución propuesta en el foro de wordpress:

enlace

Simplemente no consigo que funcione. No estoy seguro de en qué archivos el cartel está colocando las diferentes piezas de código. Intenté usar el código y enganchar una función a comment_post:

add_action('comment_post', 'print_reply_link', 10, 2);

function print_reply_link( $comment_id, $approved ){
  if( $approved ){
    $comment = get_comment( $comment_id );
    if ( $comment->comment_parent ) {
    $parent = get_comment( $comment->comment_parent );
    $parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
    printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
    } 
  }
}

Esto devolvió una página en blanco con "en respuesta a authorname ". Después de volver a cargar la publicación, un comentario de respuesta se muestra correctamente pero sin ningún vínculo al comentario original

Mis habilidades de codificación son realmente muy básicas, por lo que no tengo una buena idea de cómo debo proceder. Estaría muy agradecido por cualquier ayuda.

    
pregunta sarytash 05.02.2012 - 04:10

1 respuesta

4

Esta es mi solución y no la propuesta de solución sugerida en los foros de WordPress. Resulta bastante fácil, pero implica algunos pasos.

1) Vaya a wp-admin- > Configuración- > Discusión y desactive los comentarios enlazados. Esto deshabilitará el subproceso, lo que deseamos, pero también eliminará la posibilidad de que "respondamos" a un comentario en particular. Tenemos que devolver eso.

2) Agregue la secuencia de comandos a continuación a funciones.php de su tema o a un complemento.

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3) La impresión de los comentarios se realiza mediante una devolución de llamada a wp_list_comments . TwentyEleven usa la función twentyeleven_comment() en su functions.php . Si su tema no tiene una devolución de llamada, tendrá que crear uno. De forma predeterminada, se utiliza el contenido del método start_el de la clase Walker_Comment en "wp-includes / comment-template.php". Copie eso o copie la devolución de llamada del tema y cambie el nombre de la función a fake_threaded_comment .

3) Encuentre la función wp_list_comments en el comments.php de su tema y cambie la devolución de llamada. Debería verse como:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4) Ahora vamos a hacer un poco de trampa. En esa devolución de llamada, 'fake_threaded_comment', debería haber una llamada a la función comment_reply_link . Necesitamos editarlo para que podamos pasar los argumentos de "profundidad" y "max_depth". Estamos configurando 'profundidad' en 1 y max_depth en 2. Esto hará que nuestro botón / enlace "Responder" vuelva a aparecer.

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5) Configure el enlace al comentario principal. Además de la función de devolución de llamada, es posible que haya observado referencias a $comment . $comment->comment_parent es el ID del comentario con respuesta y get_comment_link($comment->comment_parent) proporciona la URL del comentario principal (no el marcado de anclaje completo). get_comment($comment->comment_parent) obtendrá los datos del comentario principal. Entonces, algo como ...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

Eso es todo. Ahora puede comentar sobre comentarios particulares, pero una vez publicado, el comentario aparecerá al final o al principio de la lista de comentarios, según el orden de carga.

Probado con TwentyEleven en WordPress 3.4.1 (un poco desactualizado pero ya está en mi servidor dev). Estoy seguro de que hay cosas que los temas o los complementos podrían hacer para romper esto, pero no creo que un tema o complemento de buen comportamiento lo rompa.

Esa es mi buena acción del día. Por favor, avíseme si algo sale mal.

    
respondido por el s_ha_dum 03.11.2012 - 18:43

Lea otras preguntas en las etiquetas