Un ejemplo tomado de aquí:
<?php /* Plugin Name: Formulario de contacto ejemplo Plugin URI: http://example.com Description: Un formulario de contacto de ejemplo para probar plugins Version: 1.0 Author: Intelisen Author URI: http://intelisen.com */ function html_form_code() { echo '<form method="post">'; echo '<p>'; echo 'Nombre (requerido) <br/>'; echo '<input type="text" name="cf-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["cf-name"] ) ? esc_attr( $_POST["cf-name"] ) : '' ) . '" size="40" />'; echo '</p>'; echo '<p>'; echo 'Email (requerido) <br/>'; echo '<input type="email" name="cf-email" value="' . ( isset( $_POST["cf-email"] ) ? esc_attr( $_POST["cf-email"] ) : '' ) . '" size="40" />'; echo '</p>'; echo '<p>'; echo 'Asunto (requerido) <br/>'; echo '<input type="text" name="cf-subject" pattern="[a-zA-Z ]+" value="' . ( isset( $_POST["cf-subject"] ) ? esc_attr( $_POST["cf-subject"] ) : '' ) . '" size="40" />'; echo '</p>'; echo '<p>'; echo 'Mensaje (requerido) <br/>'; echo '<textarea rows="10" cols="35" name="cf-message">' . ( isset( $_POST["cf-message"] ) ? esc_attr( $_POST["cf-message"] ) : '' ) . '</textarea>'; echo '</p>'; echo '<p><input type="submit" name="cf-submitted" value="Enviar"></p>'; echo '</form>'; } function deliver_mail() { // Si se han enviado los datos, procesar if ( isset( $_POST['cf-submitted'] ) ) { // Sanear valores $name = sanitize_text_field( $_POST["cf-name"] ); $email = sanitize_email( $_POST["cf-email"] ); $subject = sanitize_text_field( $_POST["cf-subject"] ); $message = esc_textarea( $_POST["cf-message"] ); // Conseguir el mail del administrador $to = get_option( 'admin_email' ); $headers = "From: $name <$email>" . "\r\n"; // Si todo va bien, mensaje ok if ( wp_mail( $to, $subject, $message, $headers ) ) { echo '<div>'; echo '<p>Gracias por contactar.</p>'; echo '</div>'; } else { echo 'Error inesperado'; } } } function cf_shortcode() { deliver_mail(); html_form_code(); } add_shortcode( 'intelisen_contact_form', 'cf_shortcode' );