Formulario personalizado que almacena datos en la base de datos
Nunca he usado WordPress antes, pero tengo mucha experiencia en programación. Mi pregunta es, ¿cómo crear formularios personalizados en WordPress?
Necesito crear un formulario donde un usuario complete algunos campos de entrada y al enviarlo, los datos deben almacenarse en la base de datos. No necesito ninguna notificación al guardar.
También necesito consultar los datos y obtener la salida en una tabla HTML.
Gracias

Encontré la solución al problema yo mismo. Mira el código a continuación, esto lo resolverá.
Coloca el código dentro de tu plantilla personalizada recién creada.
<?php
if (!empty($_POST)) {
global $wpdb;
$table = wp_achord;
$data = array(
'name' => $_POST['yourname'],
'chord' => $_POST['chord']
);
$format = array(
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
echo 'Los datos han sido guardados';
}
} else {
?>
<form method="post">
<input type="text" name="yourname">
<textarea name="chord"></textarea>
<input type="submit">
</form>
<?php
}
?>

Mi sugerencia:
Utiliza Contact Form 7 junto con Contact Form DB. Puedes "diseñar" tu formulario en el backend y colocarlo en el frontend mediante un simple shortcode.
La extensión Contact Form DB te permite guardar tus datos en la base de datos y ofrece shortcodes para mostrarlos (o puedes consultar los datos directamente desde la base de datos si lo prefieres)

He probado Contact Form 7 y se ve genial, pero tengo algunas preguntas. ¿Es posible añadir un identificador incremental como columna a la tabla? También necesito establecer los valores del dropdown basados en los valores de una tabla. Nunca he trabajado con un CMS antes y no sé cuánto deberías y necesitas personalizar por ti mismo.

@boje puedes hacerlo con el plugin de extensión Post My CF7 Form, reorganiza la tabla del dashboard de CF7, permitiéndote usar la funcionalidad estándar de WP para añadir una columna personalizada a la tabla.

Voy a usar esta solución, pero parece ser muy personalizada y ¿podría ser un problema con los temas y actualizaciones?

Desde mi punto de vista, deberías separar la lógica del archivo de plantilla. Tu método que maneja los datos POST debe ubicarse en functions.php e inicializarse mediante un hook de inicialización.
Para manejar solo los datos enviados para una plantilla de página específica, podrías verificar un campo de entrada con nombre (opcionalmente oculto) que sea único para esa plantilla. También podrías beneficiarte usando is_page_template()

Ofrece diferentes formas. Para almacenar datos, como opciones está la tabla de opciones, la API de opciones, el lugar correcto con una entrada y un array como elemento de almacenamiento. Pero para almacenar datos y usarlos como entradas (posts), es mejor guardar cada solicitud del formulario también como entrada. Aunque aquí también hay diferentes posibilidades. Puedes guardar para diferentes tipos de entrada. El predeterminado es 'post' y también puedes guardar en un tipo de entrada personalizado (custom post type). Usa la función wp_insert_post()
para guardar en todos los tipos de entrada después de enviar el formulario desde los usuarios. Encontrarás respuestas muy buenas aquí sobre esta función, este tema y también en la vastedad de la web. También puedes ver un pequeño ejemplo en esta respuesta 73653, incluyendo adjuntos en el formulario.

Al usar 'wp_insert_post()', ¿no es eso solo para comentarios? Y si no, ¿por qué es bueno usar esa función? No entiendo la idea de la tabla de opciones. Una búsqueda rápida en Google no me ayuda :(

La función wp_insert_post()
no es para comentarios, es para el contenido de publicaciones, crear una nueva publicación. Actualicé mi respuesta ahora, estaba desde un móvil; no es muy fácil en WPSE. La otra respuesta con la sugerencia de plugins es la misma, Contact Form 7 u otros crean nuevas publicaciones, pero tienes los requisitos de un plugin. Si quieres controlar esto, también el código fuente y tienes suficientes conocimientos sobre programación, entonces un plugin personalizado para crear publicaciones es la mejor opción.

Gracias por tu ayuda hasta ahora Bueltge. Mi entendimiento de wp_insertpost
es que es una función de ayuda para insertar algo de manera rápida y segura en una tabla de la base de datos. Si tengo una tabla (nombre=Curso) con estas columnas (id, nombrecurso, participante, fechainicio, fechafin). ¿Dónde defino el nombre de la tabla? Tal vez lo entendí completamente mal. Ejemplo de código enlace

No, la función crea datos en las tablas predeterminadas de WordPress; como mínimo en _posts
y si tienes archivos adjuntos o metadatos de entrada, también en las otras tablas relacionadas con las publicaciones. Pero preguntas sobre guardar datos de formularios en WordPress y creo que esta es la mejor manera. Obtienes sin esfuerzo una interfaz de usuario con muchas soluciones para editar y mantener los elementos del formulario. Si ves el código del enlace de comportamiento que compartí, entonces verás la solución.

Gracias, creo que necesito leer un poco más o encontrar algunos tutoriales para entender mejor la configuración

Sí, como el enlace que compartí en la otra respuesta o un enlace de la web, como este.

También podrías utilizar el excelente plugin Contact Form 7 junto con la extensión Post My CF7 Form que te permitirá guardar cualquier formulario personalizado en una publicación, incluyendo imágenes como adjuntos destacados, y entradas de tipo select/checkbox/radio como taxonomías.
El plugin Post My CF7 Form tiene una funcionalidad muy completa que puede aprovecharse para personalizar y ajustar aún más la forma en que se guardan tus formularios. También hay una sección de documentación detallada.

Tu solución es buena y puede funcionar muy bien. Pero, hay algunas limitaciones. Por ejemplo:
1) ¿Qué pasa con la búsqueda y ordenación de entradas que se publican a través de tu formulario? 2) ¿Qué hay de exportar los datos ingresados en tu formulario a Excel, CSV o PDF? 3) ¿Y si deseas imprimir los datos insertados?
Todo eso se puede lograr con los plugins Contact Form 7 + Save Contact Form 7.
Ambos son plugins gratuitos ampliamente utilizados: http://savecontactform7.com/ http://contactform7.com/

Por favor, declara tu afiliación y haz que la respuesta sea específica a los requisitos de la pregunta. Esto parece más un anuncio que una solución genuina.

<?php
/**
* Usa estas líneas de código, funcionan en más del 100% de los casos
*/
get_header();?> <?php
if (!empty($_POST)) {
global $wpdb;
$table = wp_contact;
$data = array(
'name' => $_POST['aname'],
'email' => $_POST['aemail'],
'subject' => $_POST['asubject'],
'msg' => $_POST['amsg']
);
$format = array(
'%s',
'%s'
);
$success=$wpdb->insert( $table, $data, $format );
if($success){
echo 'los datos han sido guardados' ;
}
}
else {
?>
<form action="<?php echo get_option('siteurl'); ?>/form/" method="post">
<input type="text" name="aname">
<input type="text" name="aemail">
<input type="text" name="asubject">
<textarea type="text" name="amsg"></textarea>
<input type="submit">
</form>
<?php } ?>
