J'ai une fonction qui définit un champ personnalisé sur un type de message. Disons que le champ est "sous-titre".
Lorsque le message est enregistré, je souhaite effectuer une validation sur l'entrée et afficher un message d'erreur sur l'écran d'édition du message si nécessaire. Quelque chose comme:
// Handle post updating
function wpse_update_post_custom_values($post_id, $post) {
// Do some checking...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors->add('oops', 'There was an error.');
}
return $errors;
}
add_action('save_post','wpse_update_post_custom_values',1,2);
J'essaie de lier cela à l'action save_post, mais je ne sais pas comment gérer les erreurs. Il ne semble pas y avoir d'objet d'erreur passé dans la fonction, et si je crée mon propre obj WP_Error et le renvoie, il n'est pas respecté par quelque mécanisme que ce soit qui crache des erreurs sur la page de post-édition.
J'ai actuellement un message d'erreur sur la page dans ma boîte de méta personnalisée, mais ce n'est pas idéal - je préfère avoir une grosse erreur rouge, en haut comme WP s'affiche normalement.
Des idées?
MISE À JOUR:
Sur la base de la réponse de @Denis, j'ai essayé plusieurs choses différentes. Le stockage des erreurs en tant que global n'a pas fonctionné, car Wordpress effectue une redirection pendant le processus save_post, qui tue le global avant de pouvoir l'afficher.
J'ai fini par les stocker dans un méta-champ. Le problème avec cela est que vous devez les effacer, ou ils ne disparaîtront pas lorsque vous accédez à une autre page, j'ai donc dû ajouter une autre fonction attachée à admin_footer qui efface simplement les erreurs.
Je ne m'attendais pas à ce que la gestion des erreurs pour quelque chose d'aussi commun (mise à jour des messages) soit aussi maladroite. Suis-je en train de manquer quelque chose d'évident ou est-ce la meilleure approche?
// Handle post updating
function wpse_5102_update_post_custom_values($post_id, $post) {
// To keep the errors in
$errors = false;
// Do some validation...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors .= 'whoops...there was an error.';
}
update_option('my_admin_errors', $errors);
return;
}
add_action('save_post','wpse_5102_update_post_custom_values',1,2);
// Display any errors
function wpse_5102_admin_notice_handler() {
$errors = get_option('my_admin_errors');
if($errors) {
echo '<div class="error"><p>' . $errors . '</p></div>';
}
}
add_action( 'admin_notices', 'wpse_5102_admin_notice_handler' );
// Clear any errors
function wpse_5102__clear_errors() {
update_option('my_admin_errors', false);
}
add_action( 'admin_footer', 'wpse_5102_clear_errors' );
update_option('my_admin_errors', false);
immédiatement après l'instruction if à la fin de wpse_5102_admin_notice_handler()
?
admin_footer
crochet si vous supprimez les erreurs à la fin de votre fonction de gestionnaire d'avis. Simplifie un peu les choses.