Erreur avec un plugin wordpress

lou9 -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'aimerai trouver la solution à un problème que je rencontre dans mon site wordpress local, on me signal:
Warning: in_array() expects parameter 2 to be array, string given in C:\wamp64\www\resrvation\wp-content\plugins\wc-multi-vendor-platform-lite\public\wcmvp-class-multivendor-platform-public.php on line 1994

voici la ligne de code :
function  wcmvp_views_update()
 {
  if (is_single()) {
   $wcmvp_post_id = get_the_ID();
   $wcmvp_id = [$wcmvp_post_id];

   $wcmvp_cookie = (isset($_COOKIE['wcmvp_single_prod_view']) && !empty($_COOKIE['wcmvp_single_prod_view'])) ? sanitize_text_field(json_decode($_COOKIE['wcmvp_single_prod_view'])) : array();
  
   if (isset($wcmvp_cookie) && !in_array($wcmvp_post_id, $wcmvp_cookie)) {

    $wcmvp_merged = array_merge($wcmvp_id, $wcmvp_cookie);

    array_unique($wcmvp_merged);

    setcookie("wcmvp_single_prod_view", json_encode($wcmvp_merged), time() + (86400 * 30));

    $wcmvp_prod_meta  =  get_post_meta($wcmvp_post_id, 'wcmvp_product_view_count', true);

    if (!empty($wcmvp_prod_meta)) {

     $wcmvp_count_update = $wcmvp_prod_meta + 1;
    } else {

     $wcmvp_count_update = 1;
    }

    update_post_meta($wcmvp_post_id, 'wcmvp_product_view_count', $wcmvp_count_update);
   }
  }
  if (isset($_GET["wcmvp_order_id_csv"])) {
   $wcmvp_csv_orders = explode(",", sanitize_text_field($_GET["wcmvp_order_id_csv"]));
  }

  if (isset($wcmvp_csv_orders) && !empty($wcmvp_csv_orders)) {
   $this->wcmvp_create_csv($wcmvp_csv_orders);
  }
 }


EDIT : AJout des balises de code.

Configuration: Windows / Opera 77.0.4054.277

2 réponses

  1. Pitet Messages postés 2845 Statut Membre 530
     
    Bonjour,

    Ca serait sympa d'indiquer quelle est la ligne 1994 dans ton code plutôt que de nous laisser deviner où est l'erreur ;)

    A priori, l'erreur semble venir de la ligne suivante :
    $wcmvp_merged = array_merge($wcmvp_id, $wcmvp_cookie);

    -> la fonction array_merge() attends des tableaux en paramètres, or le 2e paramètre $wcmvp_cookie n'est pas un tableau si la variable $_COOKIE['wcmvp_single_prod_view'] est vide.

    En effet lorsque tu initialises la variable $wcmvp_cookie avec ce code :
    $wcmvp_cookie = (isset($_COOKIE['wcmvp_single_prod_view']) && !empty($_COOKIE['wcmvp_single_prod_view'])) ? sanitize_text_field(json_decode($_COOKIE['wcmvp_single_prod_view'])) : array();
    

    -> la variable $wcmvp_cookie sera bien un tableau si la variable $_COOKIE['wcmvp_single_prod_view'] est vide, dans le cas contraire cette variable va récupérer le retour de la fonction sanitize_text_field(), or cette dernière fonction retourne une chaine de caractère et non un tableau.
    https://developer.wordpress.org/reference/functions/sanitize_text_field/

    Au passage, ton code serait tellement plus lisible sur le forum avec les balises de code : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Bonne journée,
    0
    1. lou9
       
      merci encore pitet, mais j'ai pas trop compris je suis pas très doué en code, donc si je comprends bien je dois ajouter ou remplacer avec ce code :

         $wcmvp_cookie = (isset($_COOKIE['wcmvp_single_prod_view']) && !empty($_COOKIE['wcmvp_single_prod_view'])) ? sanitize_text_field(json_decode($_COOKIE['wcmvp_single_prod_view'])) : array(); 
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > lou9
         
        A noter que le message d'erreur indique un souci sur l'instruction in_array() et non sur array_merge()
        0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Déjà, merci d'utiliser les balise de code pour poster du code sur le forum.
    Explications à lire entièrement, disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ensuite :
    Le !empty fait déjà un ISSET .. ce n'est donc pas utile de mettre les deux.

    Et enfin, le message t'indique que tu ne retournes pas un array...
    faudrait voir ce que fait ta fonction sanitize_text_field .. mais vu le nom .. je doute qu'elle retourne un array
    n'aurais tu pas inversé l'ordre des fonctions ?

    De plus, pour que le json_decode retourne un array, il faut lui passer un second paramètre à true

       $wcmvp_cookie = !empty($_COOKIE['wcmvp_single_prod_view'])) ? json_decode(sanitize_text_field($_COOKIE['wcmvp_single_prod_view']),true) : array();
      
       if (isset($wcmvp_cookie) && !in_array($wcmvp_post_id, $wcmvp_cookie)) {
    

    0
    1. lou9
       
      d'accord jordan45, je dois rajouter ce code à quel niveau stp. merci encore
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > lou9
         
        ben tu dois remplacer et non ajouter....
        0