Erreur avec un plugin wordpress

Fermé
lou9 - Modifié le 30 juil. 2021 à 16:46
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 - 30 juil. 2021 à 17:27
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

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 526
30 juil. 2021 à 16:46
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
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 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739 > lou9
30 juil. 2021 à 17:27
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 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739
30 juil. 2021 à 16:51
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
d'accord jordan45, je dois rajouter ce code à quel niveau stp. merci encore
0
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739 > lou9
30 juil. 2021 à 17:25
ben tu dois remplacer et non ajouter....
0