WordPress : wp_kses manque deux arguments
Après avoir migré vers une nouvelle instance AWS et passé d’apache à nginx, j’ai un problème avec wp_kses que je n’avais pas auparavant.
Le formulaire est soumis et tout le traitement se passe bien, mais au lieu de rediriger vers la page de réussite, j’obtiens un message d’erreur comme celui-ci :
Attention : Argument 2 manquant pour wp_kses(), appelé dans path/to/a/file.php à la ligne 20 et défini dans root/folder/public_html/wp-includes/kses.php à la ligne 521
Ceci est mon code pour le traitement du formulaire
//Template Name: Jobs: Add mini ad form process
if (!wp_verify_nonce( $_POST['ad_mini_add_nonce'], 'submit_add_mini_ad_form' )) :
echo 'Sorry your nonce didn't verify';
exit;
endif;
// Checking for secret filed
if (isset($_POST["secret_field"]) && !empty($_POST["secret_field"])) :
echo 'Sorry, could not send.';
exit;
endif;
// process form data
$position_name = wp_kses($_POST['position_name']);
$company_name = wp_kses($_POST['company_name']);
$location = wp_kses($_POST['location']);
$link_for_apply = wp_kses($_POST['link_for_apply']);
$website = wp_kses($_POST['website']);
$name = wp_kses($_POST['name']);
$email = wp_kses($_POST['email']);
$phone = wp_kses($_POST['phone']);
// Create new add - privately published
$new_ad = array(
'post_title' => $position_name,
'post_type' => 'post',
'post_status' => 'private',
'post_author' => 1001189, //Tanja Mladenovic
);
$new_ad_id = wp_insert_post($new_ad);
$new_ad_url = get_post_permalink($new_ad_id);
$next_month = date( 'Ymd', strtotime('+30 days', time()) );
// Fill custom fileds
add_post_meta($new_ad_id, 'company_location', $location);
add_post_meta($new_ad_id, 'ad_type', 'mini');
add_post_meta($new_ad_id, 'company_name', $company_name);
add_post_meta($new_ad_id, 'webiste', $webiste);
add_post_meta($new_ad_id, 'expire', $next_month);
add_post_meta($new_ad_id, 'contact_person_name', $name);
add_post_meta($new_ad_id, 'contact_person_phone', $phone);
add_post_meta($new_ad_id, 'contact_person_email', $email);
add_post_meta($new_ad_id, 'type_of_apply', 'link');
add_post_meta($new_ad_id, 'link_for_apply', $link);
Je sais que wp_kses peut avoir deux arguments supplémentaires, mais tout fonctionnait auparavant sans problème. Les documentations officielles indiquent que le deuxième argument de wp_kses ‘allowed_html’ a la valeur par défaut de none (et c’est exactement ce que je veux), et le troisième argument ‘allowed_protocols’ est facultatif
Solution n°1 trouvée
Ok, j’ai compris quel était le problème. C’était la mise à jour de WordPress. Dans cette nouvelle version wp_kses
doit avoir un deuxième argument. Im mon cas, je ne veux pas autoriser le html, j’ai donc ajouté un tableau vide, et cela fonctionne
J’ai donc changé cette partie :
$position_name = wp_kses($_POST['position_name']);
$company_name = wp_kses($_POST['company_name']);
$location = wp_kses($_POST['location']);
$link_for_apply = wp_kses($_POST['link_for_apply']);
$website = wp_kses($_POST['website']);
$name = wp_kses($_POST['name']);
$email = wp_kses($_POST['email']);
$phone = wp_kses($_POST['phone']);
pour ça:
$position_name = wp_kses($_POST['position_name'], array());
$company_name = wp_kses($_POST['company_name'], array());
$location = wp_kses($_POST['location'], array());
$link_for_apply = wp_kses($_POST['link_for_apply'], array());
$website = wp_kses($_POST['website'], array());
$name = wp_kses($_POST['name'], array());
$email = wp_kses($_POST['email'], array());
$phone = wp_kses($_POST['phone'], array());
0 commentaire