Validación de formulario posterior a frontend
-
16-10-2019 - |
Pregunta
Ok, ha habido varias publicaciones aquí sobre formularios de publicación frontend. Los he leído todos, lo que me llevó a donde estoy. Ahora, cada forma que encuentro tiene alguna forma de validación que parece verificar un valor para los campos que desea hacer requeridos. Los he probado y no puedo hacer que nada funcione. Simplemente no puedo hacer ningún campo requerido. Todo lo demás sobre la forma es perfecto. Pero me encantaría hacer cumplir mis campos requeridos (bonificación para los mensajes de error apropiados).
He intentado mirar en Google, realmente no creo que JS sea lo que quiero usar para esto. Y cualquier otra validación de PHP, parece que tampoco puedo hacer trabajo. Estoy seguro de que los estoy incorporando mal de alguna manera.
Esto es lo que tengo: http://pastebin.com/rw4c6jzq (Se supone que las líneas de plantilla completa 9-19 son validación)
Mi script de procesamiento en la plantilla:
<?php
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "new_post") {
// Do some minor form validation to make sure there is content
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Please enter the wine name';
}
if (isset ($_POST['description'])) {
$description = $_POST['description'];
} else {
echo 'Please enter some notes';
}
$tags = $_POST['post_tags'];
$winerating = $_POST['winerating'];
// ADD THE FORM INPUT TO $new_post ARRAY
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_category' => array($_POST['cat']), // Usable for custom taxonomies too
'tags_input' => array($tags),
'post_status' => 'publish', // Choose: publish, preview, future, draft, etc.
'post_type' => 'post', //'post',page' or use a custom post type if you want to
'winerating' => $winerating
);
//SAVE THE POST
$pid = wp_insert_post($new_post);
//KEEPS OUR COMMA SEPARATED TAGS AS INDIVIDUAL
wp_set_post_tags($pid, $_POST['post_tags']);
//REDIRECT TO THE NEW POST ON SAVE
$link = get_permalink( $pid );
wp_redirect( $link );
//ADD OUR CUSTOM FIELDS
add_post_meta($pid, 'rating', $winerating, true);
//INSERT OUR MEDIA ATTACHMENTS
if ($_FILES) {
foreach ($_FILES as $file => $array) {
$newupload = insert_attachment($file,$pid);
// $newupload returns the attachment id of the file that
// was just uploaded. Do whatever you want with that now.
}
} // END THE IF STATEMENT FOR FILES
} // END THE IF STATEMENT THAT STARTED THE WHOLE FORM
//POST THE POST YO
do_action('wp_insert_post', 'wp_insert_post');
La forma y todo lo demás se puede ver en el pastebin para verlo todo en contexto. ¡Muchas gracias!
Solución
La mejor manera de hacer la validación de formulario es con una combinación de JavaScript y PHP.
La razón por la que desea realizar la validación de JavaScript es dar a los usuarios la oportunidad de corregir sus errores sin enviar el formulario. Además, detendrá cualquier error informal. También querrá garantizar la validación en el back-end en caso de que JavaScript esté apagado.
De todas formas, desinfectante Sus datos deben ser parte de este proceso. Use cualquiera de estas funciones de WordPress para ayudarlo allí: Validación de datos.
Para la validación de JavaScript, recomiendo el complemento de validación jQuery. Es muy fácil de implementar y personalizar.
En cuanto a su validación de PHP, puede intentar agregar esto para verificar los valores vacíos: $_POST['title'] != ''
Otros consejos
Creo que la forma correcta a través de PHP son las funciones esc_attr* de WordPress y todas las funciones en este archivo: WP-Includes/Formatting.php
También use las posibilidades de PHP: filtro_var