Erreur: Warning: array_values() expects parameter 1 to be array

  • Statut : non résolu
11 sujets de 1 à 11 (sur un total de 11)
  • Auteur
    Messages
  • #546731
    djmisterjon
    Participant
    Padawan WordPress
    63 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 4.1–fr_FR
    – Version de PHP/MySQL :je ne sé plus, la dernière
    – Thème utilisé : bazard
    – Extensions en place : environ 15
    – Nom de l’hebergeur : local
    – Adresse du site : local

    Problème(s) rencontré(s) :

    Bonjours je bloque sur un problème sur ma page profil.
    Lorsque les téléchargement son afficher.
    Si il ya plus de 2 fichier a télécharger , j’ai ce message erreur.


    Warning: array_diff() [function.array-diff]: Argument #1 is not an array in C:UsersmaisonWordpress ServeurInstantWP_4.3.1iwpserverhtdocswordpresswp-contentpluginswoocommercetemplatesmyaccountmy-downloads.php on line 59

    Le code de la ligne 59
    [c]$check_if_this_is_last_element = array_values( array_diff( $all_download_ids, $download_ids_used_till_now ) );[/c]

    Le code source complet de la page
    Wordpress ServeurInstantWP_4.3.1iwpserverhtdocswordpresswp-contentpluginswoocommercetemplatesmyaccount/my-downloads.php

    <?php
    /**
     * My Orders
     *
     * Shows recent orders on the account page
     *
     * @author      WooThemes
     * @package     WooCommerce/Templates
     * @version     2.0.0
     */
    if ( !defined( 'ABSPATH' ) ) {
        exit;
    }
    
    function wdm_print_download_file_name( $download, $product_meta ) {
        if ( is_numeric( $download['downloads_remaining'] ) )
            echo apply_filters( 'woocommerce_available_download_count', '<span class="count">‘ . sprintf( _n( ‘%s download remaining’, ‘%s downloads remaining’, $download[‘downloads_remaining’], ‘woocommerce’ ), $download[‘downloads_remaining’] ) . ‘</span> ‘, $download );
    
        echo apply_filters( ‘woocommerce_available_download_link’, ‘<a href="' . esc_url( $download['download_url'] ) . '">‘ . $product_meta[$download[‘download_id’]][‘name’] . ‘</a>‘, $download ); //Print file name
    }
    
    if ( $downloads = WC()->customer->get_downloadable_products() ) :
        ?>
    
        <h2><?php echo apply_filters( 'woocommerce_my_account_my_downloads_title', __( 'Available downloads', 'woocommerce' ) ); ?></h2>
    
        <ul class="digital-downloads">
            <?php
            $all_product_ids = array();
            $all_download_ids = array();
            $download_ids_used_till_now = array();
            foreach ( $downloads as $download ) :
                ?>
    
                <?php
                do_action( 'woocommerce_available_download_start', $download );
    
                if ( !in_array( $download['product_id'], $all_product_ids ) ) { //Check if current product id is already there in $all_product_ids array. If it goes in this loop, that means it is new product id
                    $product_meta = get_post_meta( $download['product_id'], '_downloadable_files', true ); //All download ids of the product
    
                    $all_product_ids[] = $download['product_id']; //Push Current download's Product id to an array
    
                    $all_download_ids = array_keys( $product_meta ); //Get all download ids of the current product
    
                    echo '<li><span>‘ . get_the_title( $download[‘product_id’] ) . ‘</span><ul>‘; //Print product name
    
                    $download_ids_used_till_now[] = $download[‘download_id’]; //add download id to an array
    
                    echo ‘<li>‘;
                    wdm_print_download_file_name( $download, $product_meta );
                    echo ‘</li>‘;
    
                    $check_if_this_is_last_element = array_values( array_diff( $all_download_ids, $download_ids_used_till_now ) );
    
                    if ( empty( $check_if_this_is_last_element ) ) { //This is last download id of a product
                        echo ‘</ul></li>‘; //close ul and li tags
                    }
                } else { //product id is already in use.
                    $check_if_this_is_last_element = array_values( array_diff( $all_download_ids, $download_ids_used_till_now ) );
    				
    
                    if ( isset( $check_if_this_is_last_element[0] ) && $download[‘download_id’] == $check_if_this_is_last_element[0] ) { //This is last download id of a product
                        echo ‘<li>‘;
                        wdm_print_download_file_name( $download, $product_meta );
                        echo ‘</li>‘;
    
                        echo ‘</ul></li>‘; //close ul and li tags
    
                        unset( $download_ids_used_till_now );
                        unset( $all_download_ids );
                    } else { //There are few more download ids
                        $download_ids_used_till_now[] = $download[‘download_id’];
    
                        echo ‘<li>‘;
                        wdm_print_download_file_name( $download, $product_meta );
                        echo ‘</li>‘;
                    }
                }
                do_action( ‘woocommerce_available_download_end’, $download );
                ?>
    
            <?php endforeach; ?>
        </ul>
    
        <?php endif; ?>

    Quelque a une idée de ce qui est mal fait ??

    #992868
    didier07
    Participant
    Maître WordPress
    1965 contributions
    djmisterjon wrote:
    Lorsque les téléchargement son afficher.

    Tu sais que quand on parle la france il ya a une gramme mère et une conjuge aison
    Il a fallu que je relise ta phrase 4 fois pour comprendre

    Ta variable $all_download_ids est définie avant ma ligne 59, mais ce n’est pas un tableau. Tu dois avoir un plugin qui intervient sur le hook ‘woocommerce_available_download_start’ et qui annule la variable

    #992869
    djmisterjon
    Participant
    Padawan WordPress
    63 contributions
    didier07 wrote:
    djmisterjon wrote:
    Lorsque les téléchargement son afficher.

    Tu sais que quand on parle la france il ya a une gramme mère et une conjuge aison
    Il a fallu que je relise ta phrase 4 fois pour comprendre

    Ta variable $all_download_ids est définie avant ma ligne 59, mais ce n’est pas un tableau. Tu dois avoir un plugin qui intervient sur le hook ‘woocommerce_available_download_start’ et qui annule la variable

    Je suis canadien, je n’est pas de Bescherelle sur moi , mais peut être a tu eu un peut de difficulté a me lire a mon expression, il est vrai que les français du canada, on parle et écrit d’une autre façon.
    Pour en revenir a ta réponse , Je ne crois pas avoir installer d’extension qui toucherai au lien digital des produits.

    Cependant j’ai essayer quelque modification a l’aveuglette.
    Lorsque je change:
    [c]if ( isset( $check_if_this_is_last_element[0] ) && $download == $check_if_this_is_last_element[0] )[/c]
    par

    if ( isset( $check_if_this_is_last_element[0] ) && $download == $check_if_this_is_last_element[0] )

    L’erreur n’apparait plus, mais la séparation des balise

      ce fait plus du tout et tout ce liste avec

    • .

      Un indice ou chercher?

      Je bloque

      Merci et désoler pour mon orthographe.

    #992870
    djmisterjon
    Participant
    Padawan WordPress
    63 contributions
    djmisterjon wrote:
    didier07 wrote:
    djmisterjon wrote:
    Correction

    [c]if ( isset( $check_if_this_is_last_element[0] ) && $download == $check_if_this_is_last_element[0] )[/c]

    par

    if ( isset( $check_if_this_is_last_element[1] ) && $download[‘download_id’] == $check_if_this_is_last_element[1] )

    #992871
    didier07
    Participant
    Maître WordPress
    1965 contributions
    djmisterjon wrote:
    Je suis canadien, je n’est pas de Bescherelle sur moi , mais peut être a tu eu un peut de difficulté a me lire a mon expression, il est vrai que les français du canada, on parle et écrit d’une autre façon.

    Je comprends, Excuse moi 😳
    J’ai une voisine Québequoise qui nous fait rire avec ses expressions qu’on ne comprends pas, comme une “chaudière” par exemple 🙂

    Tu as une solution cache misère qui est de mettre [c]$check_if_this_is_last_element = array_values( array_diff( (array)$all_download_ids, $download_ids_used_till_now ) );[/c]
    qui va le forcer à considérer que $all_download_ids est un array

    Didier

    #992872
    djmisterjon
    Participant
    Padawan WordPress
    63 contributions
    didier07 wrote:
    djmisterjon wrote:
    Je suis canadien, je n’est pas de Bescherelle sur moi , mais peut être a tu eu un peut de difficulté a me lire a mon expression, il est vrai que les français du canada, on parle et écrit d’une autre façon.

    Je comprends, Excuse moi 😳
    J’ai une voisine Québequoise qui nous fait rire avec ses expressions qu’on ne comprends pas, comme une “chaudière” par exemple 🙂

    Tu as une solution cache misère qui est de mettre [c]$check_if_this_is_last_element = array_values( array_diff( (array)$all_download_ids, $download_ids_used_till_now ) );[/c]
    qui va le forcer à considérer que $all_download_ids est un array

    Didier

    Merci, je viens de tester en remplaçant ton bout de code.
    Malheureusement, j’ai maintenant cette erreur suivi d’une autre.!
    Ces compliquer le php :(

    Warning: array_diff() [function.array-diff]: Argument #2 is not an array in C:UsersInformatiquelepageWordpress ServeurInstantWP_4.3.1iwpserverhtdocswordpresswp-contentpluginswoocommercetemplatesmyaccountmy-downloads.php on line 59

    Warning: array_values() expects parameter 1 to be array, null given in C:UsersInformatiquelepageWordpress ServeurInstantWP_4.3.1iwpserverhtdocswordpresswp-contentpluginswoocommercetemplatesmyaccountmy-downloads.php on line 59

    #992873
    didier07
    Participant
    Maître WordPress
    1965 contributions

    Il attend 2 tableaux pour faire son array_diff, et aucune de tes variable n’est un tableau
    En mettant ça
    [c]$check_if_this_is_last_element = array_values( array_diff( (array)$all_download_ids, (array)$download_ids_used_till_now ) );[/c]
    les 2 seront considérées comme tableaux (1ère ligne de ton erreur) et array_diff te retournera un tableau sur lequel il pourra faire un array_values (2ème ligne de ton erreur)

    #992874
    djmisterjon
    Participant
    Padawan WordPress
    63 contributions
    didier07 wrote:
    Il attend 2 tableaux pour faire son array_diff, et aucune de tes variable n’est un tableau
    En mettant ça
    [c]$check_if_this_is_last_element = array_values( array_diff( (array)$all_download_ids, (array)$download_ids_used_till_now ) );[/c]
    les 2 seront considérées comme tableaux (1ère ligne de ton erreur) et array_diff te retournera un tableau sur lequel il pourra faire un array_values (2ème ligne de ton erreur)

    Whaouu, une chance qu’il ya des pro comme toi !.
    Je crois je vais rester sur le monde facile du css et html haha!
    Le PHP sa me dépasse et trop compliquer pour moi.

    Tout semble ok maintenant, mise a part quelque problème esthétique.
    Les balise Li et et ul semble avoir un peut difficulté a s’organiser ensemble.
    Mais je crois je vais me débrouiller a bidouiller sa un peut.
    Tu en a déjà fait beaucoup.

    Si j’ai des problèmes je reviendrai.
    Merci beaucoup pour ta solution.

    #992875
    didier07
    Participant
    Maître WordPress
    1965 contributions

    De rien :D
    J’ai caché les erreurs, mais ca te dit pas pourquoi les deux variables n’ont pas le type attendu par contre :fire:

    #992876
    djmisterjon
    Participant
    Padawan WordPress
    63 contributions
    didier07 wrote:
    De rien :D
    J’ai caché les erreurs, mais ca te dit pas pourquoi les deux variables n’ont pas le type attendu par contre :fire:

    Tu fait comme les mécaniciens automobile, lorsque ya un check-engine, il efface juste le code pour cacher l’erreur.
    haha.
    Je ne sais pas mais je vais me pencher la dessus.
    Je vai suivre ta piste d’un extension qui causerai ce type de problème.

    #992877
    didier07
    Participant
    Maître WordPress
    1965 contributions

    cherche un add_action( ‘woocommerce_available_download_start’, … dans les extensions. Ce sera une première piste 😕

11 sujets de 1 à 11 (sur un total de 11)
  • Vous devez être connecté pour répondre à ce sujet.