WordPress : wp_kses manque deux arguments

Publié par Jean-Michel le

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_ksesdoit 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());
Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *