Erreur avec un plugin wordpress

lou9 -  
jordane45 Messages postés 38486 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
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > lou9
 
A noter que le message d'erreur indique un souci sur l'instruction in_array() et non sur array_merge()
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
lou9
 
d'accord jordan45, je dois rajouter ce code à quel niveau stp. merci encore
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > lou9
 
ben tu dois remplacer et non ajouter....
0