LordZardeck
Me gustaría modificar el HTML real de los formularios de comentarios en WordPress. sé de la comment_form()
función que proporciona WordPress, pero en realidad no me deja modificar el html del formulario. Lo que estoy tratando de hacer específicamente es crear un formulario receptivo de arranque, lo cual no es posible con las opciones provistas con el comment_form()
función. He intentado buscar en Internet una forma, pero fue en vano. ¿Alguien puede señalarme en la dirección correcta?
Déjame aclarar esto:
Estoy buscando modificar el FORMULARIO real y contener elementos DIV del formulario de comentarios, no solo los campos.
lukejanicke
Las partes no personalizables de la función. comment_form()
debería (idealmente) limitarse puramente al código que es esencial para la seguridad y el manejo adecuado de formularios por parte del núcleo de WordPress. Sin embargo, este no es el caso. Para explorar el problema, usé filtros (podría haber usado argumentos) para eliminar por completo todo el código que es personalizable. Establecí todas las variables disponibles en cadenas vacías, es decir, todas las cosas mencionadas en la página del códice para comment_form()
.
Aquí está el código sobrante, no personalizable de comment_form()
:
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/1#respond" style="display:none;">Click here to cancel reply.</a></small></h3>
<form action="http://www.[yourdomain].com/wp-comments-post.php" method="post" id="" class="comment-form">
<p class="form-submit">
<input name="submit" type="submit" id="" value="" />
<input type="hidden" name="comment_post_ID" value="1" id='comment_post_ID' />
<input type="hidden" name="comment_parent" id='comment_parent' value="0" />
</p>
</form>
</div><!-- #respond -->
¿De dónde viene todo esto? En la parte inferior de la página del códice para comment_form()
dice…
Código fuente
comment_form()
Se encuentra en wp-incluye/comentario-template.php.
comment-template.php
está vinculado y puede ver el código completo en el navegador. comment_form()
comienza en la línea 1960. De hecho, es la última función en ese archivo. No hay argumentos ni filtros que le permitan modificar el código residual anterior. Estas líneas de código están todas más o menos “codificadas”.
El texto Haga clic aquí para cancelar la respuesta. es el único texto que sobrevivió a mi filtro genocidio. Extrañamente, comment_form()
tiene texto de respaldo para cancel_reply_link
codificado de forma rígida en la función, en caso de que se pase a la función como una cadena vacía. Ninguno de los otros elementos filtrables tiene copias de seguridad codificadas.
Es fácil ver qué bits de código son esenciales y qué bits no son esenciales para un formulario HTML. Un poco más difícil de juzgar es qué bits son esenciales para un WordPress forma. Algunos de los bits anteriores se generaron dinámicamente (tenga en cuenta que este es el primer comentario en un blog de desarrollo sin otras respuestas, sin comentarios de padres/hijos).
Desde el comment_form()
función en comment-template.php
puede dibujar el código necesario para producir las partes dinámicas del formulario de WordPress. Luego, con argumentos predeterminados tomados de la página del códice para comment_form()
, puede armar un formulario básico, codificando los campos deseados, las etiquetas y el HTML envolvente. Estoy haciendo eso ahora y poniendo mi función de formulario personalizado en mi tema comments.php
archivo de plantilla, que yo llamo usando comments_template()
solo en single.php
(para este tema en particular).
El resultado sería un formulario de comentarios de WordPress completo y adecuado, esbelto y mezquino. Pero… sería un formulario que ya no se podría personalizar usando comment_form()
argumentos o filtros relacionados a menos que haya seguido adelante e incluido el código de filtro en su propia función de formulario de comentarios. Como ya lo estás personalizando, probablemente no sea un problema. Del mismo modo, todas las acciones de WordPress tampoco estarán disponibles para usted ni para ningún otro complemento, a menos que también active esas funciones de acción en su propia función de formulario de comentarios. Una vez más, probablemente no sea un problema para usted en este momento.
Pero lo más importante, el formulario resultante podría romper su tema si las futuras actualizaciones de WordPress cambian la forma en que el núcleo maneja los formularios.
Si conoce esos riesgos, probablemente pueda reconstruir un formulario de comentarios codificado a mano simplemente copiando el código en el página del códice para comment_form()
y en wp-incluye/comentario-template.php. No tengo el código terminado, de lo contrario lo publicaría. Pero publicaré cuando / si tengo éxito.
Correcto, eso es todo de mi parte por ahora. Tengan en cuenta (todos los lectores) que, a pesar de las apariencias, soy un desarrollador de temas de WordPress aficionado y mi dominio de PHP y WordPress es muy rudimentario. Solo escribiendo este post aprendí mucho.
También me preocupa que ya exista una solución completa y adecuada en alguna parte, pero no la he encontrado en mis búsquedas.
-
Además, si aún desea usar complementos relacionados con comentarios, puede considerar incluir
do_action('comment_form_after_fields');
dentro de<form>
etiqueta.– jave.web
21 de julio de 2017 a las 16:58
Sashi
Simplemente cree un nuevo archivo PHP con el nombre de comment_form.php y luego pegue todo su código. Y su formulario de comentarios está listo.
no debe editar el archivo wp-includes/comment-template.php.
Guarde esto para su referencia para darle más estilo a su formulario de comentarios existente
http://codex.wordpress.org/Template_Tags/comment_form
O este
http://wordpress.org/support/topic/where-to-find-the-comment_form-function-in-wp3
Código de formulario y acción
<div class="comment-form">
<h2 class="comments-wrapper-heading"> Leave a comment </h2>
<form id="commentform" action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
<div class="commentform-element">
<label class="hide" for="author">Full Name</label>
<input class="input-fields" id="author" name="author" type="text" placeholder="Full Name" value=""/>
</div>
<div class="commentform-element">
<label class="hide" for="author">Email</label>
<input class="input-fields" id="email" name="email" type="text" placeholder="Email" value=""/>
</div>
<div class="commentform-element">
<label class="hide" for="comment">Message</label>
<textarea id="comment" class="input-fields" placeholder="Message" name="comment" cols="40" rows="200"></textarea>
</div>
<input name="submit" class="form-submit-button" type="submit" id="submit-comment" value="Post comment">
<input type="hidden" name="comment_post_ID" value="22" id="comment_post_ID">
<input type="hidden" name="comment_parent" id="comment_parent" value="0">
</form>
</div>
-
no está claro en su respuesta cómo usar los campos de formulario personalizados.
– vsync
15/04/2018 a las 13:40
-
un archivo comment_form.php no se cargará usando
comment_form()
–Jeffrey von Grumbkow
14 de junio de 2018 a las 11:36
WP no ofrece una forma de crear y usar un comentario forma modelo. es decir: a partir de 4.1.1, todavía no hay forma de controlar todos del marcado HTML que compone el formulario. Solo hay formas de editar partes y eso es proporcionando argumentos a comment_form()
.
Por lo tanto, si desea editar todo el diseño (p. ej., coloque parte del contenido de lado a lado en lugar de uno encima del otro; reemplace parte del <p>
con <div>
), no tienes suerte.
¿Qué podemos hacer?
Una opción sería tomar prestado todo el comment_form()
función de la base de código de WordPress (como lo hizo este tipo): haga una copia de la función en su tema, cámbiele el nombre, personalícela y luego llámela en lugar de la función vainilla. Eso funcionará, pero existe la posibilidad de que se rompa en una futura actualización de WordPress si cambia parte del funcionamiento interno de WP.
¿Buscó la función comment_form() en el código de WordPress para ver si puede editarla?
También encontrará algunas informaciones aquí:
Esta función utiliza el formulario predeterminado. Necesitas hacer un comment-template.php
archivo en su tema y en ese archivo puede hacer su formulario. Ahora cuando llamarás comments_template()
obtendrá su formulario creado en lugar del formulario predeterminado.
-
Ok, pero eso no me ayuda con el formulario. ¿Cómo hago para que publique los datos? ¿En qué URL publico? ¿Qué campos de publicación está esperando? ¿Cómo proporciono automáticamente los detalles del usuario cuando un usuario inicia sesión?
– Lord Zardeck
14 de noviembre de 2013 a las 9:01
-
De acuerdo, busque comments.php en su tema, allí reemplace comments_form() por su formulario. La acción de tu formulario será “/wp-comments-post.php”.
– Sankalpa Mishra
14 de noviembre de 2013 a las 9:12
-
¿Cuáles son los nombres de los campos? ¿Cuáles son los campos obligatorios? ¿Cómo trata con los usuarios registrados y los usuarios desconectados? Nada de esto está documentado en el sitio de WordPress por lo que puedo decir.
– Lord Zardeck
14 de noviembre de 2013 a las 9:17
No creo que puedas cambiar el div contenedor (<div id="respond" class="comment-respond">
). Echa un vistazo a la comentario-plantilla.php
Lo único que puede cambiar es el ID del formulario. 'id_form' => 'commentform'
Puede crear un formulario receptivo sin cambiar estos elementos.
-
Ok, pero eso no me ayuda con el formulario. ¿Cómo hago para que publique los datos? ¿En qué URL publico? ¿Qué campos de publicación está esperando? ¿Cómo proporciono automáticamente los detalles del usuario cuando un usuario inicia sesión?
– Lord Zardeck
14 de noviembre de 2013 a las 9:01
-
De acuerdo, busque comments.php en su tema, allí reemplace comments_form() por su formulario. La acción de tu formulario será “/wp-comments-post.php”.
– Sankalpa Mishra
14 de noviembre de 2013 a las 9:12
-
¿Cuáles son los nombres de los campos? ¿Cuáles son los campos obligatorios? ¿Cómo trata con los usuarios registrados y los usuarios desconectados? Nada de esto está documentado en el sitio de WordPress por lo que puedo decir.
– Lord Zardeck
14 de noviembre de 2013 a las 9:17
Comunidad
Recientemente respondí algo similar en WPSE. Puedes ir y comprobarlo. aquí
Sin entrar detalladamente en la falta de separación de preocupaciones que plagan wordpress en general, me gustaría mencionar que capturar el formulario existente con
ob_start()
/ob_get_clean()
y luego filtrar por personalizaciones conDOMDocument
es una forma bastante viable de editar la mayor parte de la salida html directa opinada dentro de wordpress, especialmente si no está muy interesado en la plaga de espagueti imposible de reciclar que es el bucle.– mopsyd
24 mayo 2018 a las 17:52
Solo usa
ob_start(); comment_form(); $comment_form = ob_get_clean();
y lo tienes como una cadena.– Jonas Lundmann
13 de junio de 2018 a las 11:16