¿Cómo puedo crear un formulario personalizado en WordPress?

5 minutos de lectura

avatar de usuario
Joe.k

Tengo un sitio de WordPress y me gustaría crear un formulario (entrada → base de datos).

He visto dos tutoriales:

Ambos son muy similares. Creando el front-end con HTML y JavaScript, y luego procesando la información a la base de datos usando PHP.

Mi problema es que cada vez que envío el formulario, muestra una página 404 que dice:

¡Ups! Esa página no se puede encontrar.

Ahora mi problema es (o quiero saber):

  1. ¿Dónde tengo que poner el process.php ¿expediente? (Estoy usando ArchivoZilla). He probado varios lugares en el public_html/wp-content carpeta.

  2. ¿Por qué no se validan los campos de nombre y correo electrónico? (sin alerta por campo de nombre vacío, etc.)

Estructura del formulario:

Su nombre: [TEXT]Tu correo electrónico: [TEXT]Sexo: [*male *female]Su edad:[TEXT], [Submit Button]

página del formulario:

<form name="myForm" method="POST" onsubmit="return form_validation()" action="../process.php">
    Your Name: <input id="customer_name" name="customer_name" type="text" />
    Your Email: <input id="customer_email" name="customer_email" type="text" />
    Sex: <input name="customer_sex" type="radio" value="male" />Male <input name="customer_sex" type="radio" value="female" />Female
    Your Age: <input id="customer_age" name="customer_age" type="text" />
    <input type="submit" value="Submit" />
</form>

<script type="text/javascript">
    function form_validation() {
        /* Check the Customer Name for blank submission */
        var customer_name = document.forms["myForm"]["customer_name"].value;
        if (customer_name == "" || customer_name == null) {
            alert("Name field must be filled.");
            return false;
        }

        /* Check the Customer Email for invalid format */
        var customer_email = document.forms["myForm"]["customer_email"].value;
        var at_position = customer_email.indexOf("@");
        var dot_position = customer_email.lastIndexOf(".");
        if (at_position < 1 || dot_position < at_position + 2 || dot_position + 2 >= customer_email.length) {
            alert("Given email address is not valid.");
            return false;
        }
    }
</script>

Expediente process.php (no editado):

<?php
    $customer_name = $_POST["customer_name"];
    $customer_email = $_POST["customer_email"];
    $customer_sex = $_POST["customer_sex"];
    $customer_age = $_POST["customer_age"];

    $conn = mysqli_connect("Database Host", "Database Username", "Database  Password", "Database Name");
    if(!$conn) {
        die(‘Problem in database connection: ‘ . mysql_error());
    }

    $query = "INSERT INTO ‘Database Name’.’Table Name’ ( ‘customer_name’, ‘customer_email’, ‘customer_sex’, ‘customer_age’ ) VALUES ( $customer_name, $customer_email, $customer_sex, $customer_age )";
    mysqli_query($conn, $query);

    header("Location: my-site.com/success"); // Redirects to success page
?>

  • Cuando agrega su propia funcionalidad a un sitio de WordPress, es mejor crear un complemento.

    – mikey

    9 oct 2016 a las 14:01

  • O enrolla su propio complemento o busca algunos complementos gratuitos que hagan exactamente lo que desea. Ciertamente, hay muchos de esos por ahí… solo haz algunas búsquedas

    – Poiz

    9 oct 2016 a las 15:56


  • Puedes usar el marco pods.io, esto te permitirá crear cualquier cosa que quieras crear

    – Masivuye Cokile

    14 de noviembre de 2016 a las 14:19


  • Esta respuesta hace un gran trabajo al ilustrar la respuesta a esta pregunta, pero FYI para todos los desarrolladores que crean un formulario personalizado de WordPress, no use inserciones de campo POST directas en sus consultas MySQL. Nunca. Esto puede conducir a graves Hacks de inyección SQL. Tampoco confíes en solamente en la validación del lado del cliente. Cualquiera puede realizar una ataque de denegación de servicio directamente al propio servidor PHP. La moraleja de la historia es siempre haga la validación del lado del servidor!

    –Michael Plautz

    15 de abril de 2019 a las 17:19

  • @Michael Plautz: ¿Qué respuesta? ¿El señor Abdulai está aquí? O alguna otra respuesta? ¿O un comentario aquí? ¿O algo mas?

    -Peter Mortensen

    25 de noviembre de 2019 a las 14:03


avatar de usuario
M. Abdulai

Para responder a la pregunta uno: WordPress proporciona ganchos de acción y filtro para que los desarrolladores agreguen su código o funciones PHP personalizados. Debería investigar eso, porque el uso de complementos que producen fragmentos no ayudará en su caso, ya que hace que su código PHP se ejecute sin siquiera cargar su formulario, por lo que verá su página de éxito en su lugar.

Para obtener más información sobre los ganchos de acción y filtro visitar aquí.

Como alternativa a nosotros, los ganchos de acción/filtro, puede cargar su archivo PHP en la carpeta del tema. Sin embargo, hay un defecto en eso. Su archivo puede perderse cuando se actualice WordPress.


Para responder a la pregunta dos: hay una manera más fácil de validar su formulario si usa JavaScript. Todo lo que necesita hacer es agregar la palabra ‘requerido’ dentro de la etiqueta de entrada. También puede usar el tipo de entrada ‘correo electrónico’ junto con la palabra clave requerida para validar su correo electrónico. Vea el ejemplo a continuación.

<form name="myForm" method="POST" action="../process.php">
    Your Name: <input id="customer_name" name="customer_name" type="text" required/>
    Your Email: <input id="customer_email" name="customer_email" type="email" required/>
    Sex: <input name="customer_sex" type="radio" value="male" />Male <input name="customer_sex" type="radio" value="female" />Female
    Your Age: <input id="customer_age" name="customer_age" type="text" />
    <input type="submit" value="Submit" />
</form>

Si aún desea usar su función de JavaScript, intente usar document.getElementById('customer_name') y document.getElementById('customer_email') en vez de document.forms. También asegúrese de cerrar su etiqueta de script al final. Vea a continuación un ejemplo.

<script type="text/javascript">
    function form_validation() {
        /* Check the Customer Name for blank submission */
        var customer_name = document.getElementById('customer_name').value;
        if (customer_name == "" || customer_name == null) {
            alert("Name field must be filled.");
            return false;
        }

        /* Check the Customer Email for invalid format */
        var customer_email = document.getElementById('customer_email').value;
        var at_position = customer_email.indexOf("@");
        var dot_position = customer_email.lastIndexOf(".");
        if (at_position < 1 ||
            dot_position < at_position + 2 ||
            dot_position + 2 >= customer_email.length) {

            alert("Given email address is not valid.");
            return false;
        }
    }
</script>

  • El enlace está (efectivamente) roto: “Complemento API/Referencia de acción. Actualmente no hay texto en esta página”.

    -Peter Mortensen

    25 de noviembre de 2019 a las 14:10

¿Ha sido útil esta solución?