Error al pulsar en responder un comentario
-
Notice: Trying to get property of non-object in /homepages/20/d347308447/htdocs/wp/wp-includes/comment-template.php on line 646
-
Es muy extraño. Me atrevería a decir que el problema viene de tu theme. Probablemente esté utilizando la función
get_comment_ID()
ocomment_ID()
en un mal sitio.¿Podrías poner el código del theme que muestra los comentarios y el formulario de envío?
Hola Cybmeta, gracias por responder, también calculo que es culpa de mi theme
Lo he escrito linea a linea intentando tener la flexibilidad de poner cada cosa en un lugar personalizado
He usado estas funciones para el formulario:
paginate_coments_links() que aun no tengo claro cual es su papel
comment_form() con un array de html y class para heredar el css de materializecssMe he apoyado en el array obsoleto $comments para mostrar los comentarios para heredar el css de materializecss
<?php if (have_comments()): ?> <div class="card"> <div class="card-content"> <span class="card-title">Deja un comentario</span> <?php paginate_comments_links() ?> <?php comment_form([ 'fields'=>[ 'author'=>'<div class="input-field"><input id="author" type="text" class="validate" required><label for="author">Autor</label></div>', 'email'=>'<div class="input-field"><input id="email" type="email" class="validate" required><label for="email">Email</label></div>', 'url'=>'<div class="input-field"><input id="web" type="text" class="validate" required><label for="web">Web</label></div>' ], 'comment_field'=>'<div class="input-field"><textarea id="comentar" class="materialize-textarea" required></textarea><label for="comentar">Comentario</label></div>', 'class_submit'=>'btn blue', //'title_reply_to'=>'', 'title_reply'=>'', 'title_reply_before'=>'','title_reply_after'=>'',#Estilos titulo 'comment_notes_before'=>'','comment_notes_after'=>'',#Descripción //'comment_notes_after' => '<p>' . sprintf(__( 'Puedes usar las siguientes etiquetas y atributos <abbr title="HyperText Markup Language">HTML</abbr>: %s', 'material-lite'), ' <code>' . allowed_tags() . '</code>' ) . '</p></br>' ]) ?> </div> </div> <?php endif ?> <?php if ($comments):foreach($comments as $comment): ?> <div class="card"> <div class="card-content"> <div class="card-title"><?= $comment->comment_author ?></div> <p><?= $comment->comment_content ?></p> </div> <div class="card-action"> <a class="disabled"> <?php setlocale(LC_ALL,"es_ES.UTF-8"); date_default_timezone_set('Europe/Madrid'); ?> <?= strftime("%a, %d de %b de %Y",strtotime($comment->comment_date)) ?> </a> <a class="right" href="<?= get_permalink( $post->ID ) ?>?replytocom=<?= $comment->comment_ID ?>#respond">Responder</a> <!--a class="right" href="http://anhida.es/wp/wp-admin/comment.php?action=editcomment&c=<?= $comment->comment_ID ?>#respond">Editar</a--> </div> </div> <?php endforeach; endif ?>
Bueno, con tu código no puedo reproducir el error, ni siquiera se pueden enviar comentarios porque el atributo
name
está ausente en todos los campos del formulario, y ese atributo es obligatorio en cualquier formulario. Estos son los valore que tienes que poner (no otros):– textarea: name=»comment»
– author: name=»author»
– correo electrónico: name=»email»
– web: name=»url»Además te aconsejaría, en lugar de tu utilizar la global
$comments
, utilizar la funciónwp_list_comments()
, está función te permite controlar exactamente el HTML que quieres, así que te vale perfectamente para tu propósito del CSS:// Pones esto dónde quieres que se muestren los comentarios if (have_comments()) { wp_list_comments(['callback' => 'my_comments_callback']); } <?php // Y está función en el functions.php de tu theme function my_comments_callback( $comment, $args, $depth ) { ?> <div class="card"> <div class="card-content"> <div class="card-title"><?= $comment->comment_author ?></div> <p><?= $comment->comment_content ?></p> </div> <div class="card-action"> <a class="disabled"> <?php setlocale(LC_ALL,"es_ES.UTF-8"); date_default_timezone_set('Europe/Madrid'); ?> <?= strftime("%a, %d de %b de %Y",strtotime($comment->comment_date)) ?> </a> <a class="right" href="<?= get_permalink( $post->ID ) ?>?replytocom=<?= $comment->comment_ID ?>#respond">Responder</a> <a class="right" href="http://anhida.es/wp/wp-admin/comment.php?action=editcomment&c=<?= $comment->comment_ID ?>#respond">Editar</a> </div> </div> </div> <?php }
No he revisado este código, sólo te pongo un ejemplo de como hacerlo. Habría cosas que corregir, por ejemplo, comprobar las cacpacidades del usuario antes de mostrar el enlace de editar (o utilizar la función
edit_comment_link()
que ya hace esa comprobación).También utilizar
get_comment_date()
/get_comment_time()
para que la fecha / hora se muestre en el formato y zona horaria configurado en WordPress, sin necesidad de todo eso que haces.Espero no haberte asustado con tanta consas. Lo más importante para empezar es corregir el formulario de envío de comentarios.
Muchas gracias por responder y por tus sugerencias, no me austas, voy siguiendo el CODEX, buscando ejemplos en google, y recientemente estube viendo unos videotutoriales sobre como se crean temas desde cero, voy dando cuenta y aprendiendo poco a poco
El tema lo estoy haciendo sobre MaterializeCSS, por eso tiraba de $comments para poder personalizar el HTML para que heredase el formato del Framework MaterializeCSS, pero con comments_callback podre respetar la sintaxis como me indicas
voy probando… 😉
Tengo 3 dudas:
-¿La fecha no se pinta?
-¿No puedo anadir un class al link?
-El enlace Responder me devuelve un Notice en href<?php edit_comment_link() ?> <?php get_comment_date() ?>
Asi he dejado comments.php:
<?php if (have_comments()): ?> <div class="card"> <div class="card-content"> <span class="card-title">Deja un comentario</span> <?php paginate_comments_links() ?> <?php comment_form(array(...)) ?> </div> </div> <?php endif ?> <?php if (have_comments()) wp_list_comments(['callback'=>'my_comments_callback']) ?>
functions.php
function my_comments_callback( $comment, $args, $depth ) { ?> <div class="card"> <div class="card-content"> <div class="card-title"><?= $comment->comment_author ?></div> <p><?= $comment->comment_content ?></p> </div> <div class="card-action"> <a class="disabled"><?php get_comment_date() ?></a> <a class="right" href="<?= get_permalink( $post->ID ) ?>?replytocom=<?= $comment->comment_ID ?>#respond">Responder</a> <!--a class="right" href="http://anhida.es/wp/wp-admin/comment.php?action=editcomment&c=<?= $comment->comment_ID ?>#respond">Editar</a--> <?php edit_comment_link('class'='right') ?> </div> </div> </div> <?php } ?>
Me sigue apareciendo el error inicial y sospecho por donde van los tiros, en otros temas al pulsar en responder un comentario bajo el boton aparece una replica del formulario de comentarios, mientras que a mi me sale un error en la caja de comentarios que ya tengo en el tema, y como el tema lo escribí linea a linea le falta algo que no vi en ningún tutorial
Cambio de estrategia:
He encontrado una web que tiene varios modelos básicos de temas para maquetar encima y así evitar errores en cosas que no se del todo bien como van, la web es la siguiente:Beuno, en tu código todavía quedan cosas que depurar, por ejemplo, utilizar
get_comment_reply_link()
, comprobar el estado del comentario para mostrar el mensaje «pendiente de moderación» en su caso, comprobar si el comentario es un trackback, etc, etc, pero vas por el buen camino. Estudia como lo hace los themes de underscores, que están muy bien hechos (se supone), y aprende desde allí, es una buena opción.
- El debate ‘Error al pulsar en responder un comentario’ está cerrado a nuevas respuestas.