¿Cómo enviar datos desde un formulario HTML?
He construido una calculadora de precios personalizada en HTML con un formulario que, al enviarse, llama a un archivo PHP a través del atributo action. Este archivo PHP luego envía los datos recopilados al correo electrónico de mi empresa y otro correo al cliente que completó el formulario.
Todo funciona en otro sitio web que construimos que no es un sitio WordPress, pero no tengo idea de dónde colocar este archivo PHP para que funcione en WordPress, ya que soy nuevo en WordPress. Ya logré poner la calculadora dentro de nuestro tema, pero ahora estoy atascado. Actualmente estamos usando BeTheme, pero no necesariamente nos quedaremos con él si es más fácil hacer esto sin él.
Cualquier ayuda será apreciada.

Estoy de acuerdo con otras respuestas que en la mayoría de los casos es mejor usar un plugin para manejar el envío de formularios. Sin embargo, hay excepciones a esta regla.
Si te encuentras en una situación donde necesitas manejar el envío de formularios por ti mismo, puedes enviar los datos a admin-post.php
. Aquí te explico cómo configurarlo:
Primero, configura tu formulario.
<!-- Envía el formulario a admin-post.php -->
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="POST">
<!-- Tus campos de formulario van aquí -->
<!-- Añade un campo oculto con el nombre "action" y un valor único que puedas usar para manejar el envío del formulario -->
<input type="hidden" name="action" value="my_simple_form">
</form>
Ahora configura una acción en tu archivo functions.php
. Usarás el valor que pusiste en el campo oculto "action" del formulario.
function my_handle_form_submit() {
// Aquí es donde controlarás tu formulario después de enviarlo, tienes acceso a $_POST aquí.
}
// Usa el valor del campo oculto "action" cuando añadas las acciones
add_action( 'admin_post_nopriv_my_simple_form', 'my_handle_form_submit' );
add_action( 'admin_post_my_simple_form', 'my_handle_form_submit' );
Aquí hay un enlace con más información del codex - https://codex.wordpress.org/Plugin_API/Action_Reference/admin_post_(action)

Es mejor colocar este tipo de funcionalidad en un plugin, no meterlo en el tema. Puedes ver un ejemplo de un plugin simple de formulario de contacto para WordPress aquí: https://www.sitepoint.com/build-your-own-wordpress-contact-form-plugin-in-5-minutes/
Consejos:
- Ejecuta tu código en el momento adecuado, encuentra el hook que te convenga (ej. el hook init).
- Usa wp_mail() en WordPress, no la función estándar mail() de PHP.
Como mencionó @WebElaine anteriormente: cuando creas un plugin para esto, no perderás la funcionalidad al cambiar de tema. Además, la funcionalidad será fácil de transferir entre sitios si es necesario, y podrás activarla/desactivarla con un clic. Si la funcionalidad es exclusiva de este sitio web, sigue siendo una buena idea no incluirla en el functions.php del tema hijo. Solo la funcionalidad específica del tema (widgets, inclusión de archivos de estilos/js específicos, etc.) debe colocarse allí. Ej. No incluirías el código de Contact Form 7 en tu tema hijo.

Por favor, explica tus razones por las cuales es 'mejor' escribir un plugin

Hay una manera más fácil :)
Simplemente añade todo tu código como 'Formulario' + 'Parte PHP' en cualquier archivo .php de tu tema. ¡CUALQUIERA! Luego crea la verificación "If else" con/debajo de cualquier PARÁMETRO que desees. Así el formulario solo aparecerá si ese parámetro está en la URL principal de tu navegador (página actual).
Por ejemplo:
tienes una URL como example.com/hello-world
(cualquier URL de publicación)
solo añade en "single.php" algo como:
if ( $_GET['abcde'] == 'abc') {
... tu código ...
}
y ahora simplemente carga la página con la siguiente URL: example.com/hello-world?abcde=abc
También haz que la acción de tu FORMULARIO sea:
<form action=""> // sin ninguna URL

Existe una forma rápida y sencilla de hacer las cosas: si este es un script independiente para WordPress que calcula precios y envía correos, ten en cuenta que puedes colocar un archivo PHP arbitrario en el directorio raíz (o en cualquier lugar) de la estructura de archivos/directorios de tu sitio, y a menos que tengas reglas de reescritura y/o una configuración de servidor que lo impida (nota: es probable que no las tengas), entonces se podrá acceder a él de forma independiente.
Por ejemplo, si tienes un script test.php
y tu sitio WordPress está disponible en línea en https://example.com, y colocas test.php en el directorio raíz de tu sitio (por ejemplo, donde se encuentran archivos como wp-config.php
y carpetas como wp-content/
), entonces tú y los visitantes de tu sitio podrán acceder a test.php
desde un navegador en: https://example.com/test.php. Otros formularios generados, ya sea por WordPress o de forma completamente independiente de WordPress, podrían enviar datos mediante POST a test.php
.
Para una opción amigable para principiantes en WordPress para configurar funcionalidades de contacto, podrías usar uno de los muchos plugins de formularios de contacto disponibles. Una opción popular es Contact Form 7: https://es.wordpress.org/plugins/contact-form-7/. Existen docenas de alternativas similares.
Una excelente opción comercial para formularios que puede usarse para crear formularios dinámicos con campos condicionales, etc. es Gravity Forms: https://www.gravityforms.com/
Parece que tu script podría estar haciendo dos cosas: hay un "calculador de precios" y algo que "envía correos a tu empresa". Si necesitas integrar un calculador con tu tema, podrías intentar implementarlo directamente en los archivos de plantilla de tu tema, o quizás crearlo como un Widget: https://developer.wordpress.org/themes/functionality/widgets/. Si tu tema define "áreas de widgets", podrías colocar tu widget fácilmente en cualquiera de ellas desde el wp-admin.
¡Espero que esto ayude! ¡Saludos!
