CODE PHP/AJAX POUR UPLOADER FICHIERS (Créer un compte)

  • WordPress :6.4
  • Statut : non résolu
  • Ce sujet contient 2 réponses, 2 participants et a été mis à jour pour la dernière fois par Magalandes, le il y a 3 mois.
3 sujets de 1 à 3 (sur un total de 3)
  • Auteur
    Messages
  • #2466124
    Magalandes
    Participant
    Initié WordPress
    2 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 8.2.10
    • Thème utilisé : Archee
    • Extensions en place :
    • Nom de l’hébergeur : OVH
    • Adresse du site :

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

    Bonjour à tous !

    Je lance une bouteille à la mer car cela fait presque 1 semaine que je planche sur le sujet et même si je touche au but, j’ai encore un petit bug !

    Je cherche à ajouter à ma page de paiement deux champs permettant au client d’uploader une photo (l’un obligatoire et l’autre non). L’idée est, bien-sûr, de retrouver ces fichiers par la suite dans le récap de commande dans le back office.
    Le premier champ d’upload que j’ai codé dans mon « functions.php » marche bien donc je l’ai tout naturellement dupliqué, c’est là que ça se complique car mes connaissances de php/ajax/js se terminent ici.

    La 2e photo s’upload sans soucis mais dans le recap de commande, elle se fusionne avec la 1ere. Je pense que seule la 1ere est appelée dans les meta mais je ne sais pas où rajouter mon petit « 2 » pour dissocier les deux uploads. Pouvez-vous m’aider à ce sujet ? Pardonnez mon explications si je ne suis pas claire.

    Merci par avance !

    Voici le code des deux champs :

    /* -------------- Ajout du champ fichier 1 au checkout */

    add_action( 'woocommerce_after_order_notes', 'bbloomer_checkout_file_upload' );

    function bbloomer_checkout_file_upload() {
    echo '
    <p class="form-row form-row-wide">
    <label for="appform">Uploader photo 1 <abbr class="required" title="required">*</abbr></label>
    <span class="woocommerce-input-wrapper">
    <input type="file" id="appform" name="appform" accept="image/*" required>
    <input type="hidden" name="appform_field" />
    </span>
    </p>';

    wc_enqueue_js( "
    $( '#appform' ).change( function() {
    if ( this.files.length ) {
    const file = this.files[0];
    const formData = new FormData();
    formData.append( 'appform', file );
    $.ajax({
    url: wc_checkout_params.ajax_url + '?action=appformupload',
    type: 'POST',
    data: formData,
    contentType: false,
    enctype: 'multipart/form-data',
    processData: false,
    success: function ( response ) {
    $( 'input[name=\"appform_field\"]' ).val( response );
    }
    });
    }
    });
    " );
    }

    add_action( 'wp_ajax_appformupload', 'bbloomer_appformupload' );
    add_action( 'wp_ajax_nopriv_appformupload', 'bbloomer_appformupload' );

    function bbloomer_appformupload() {
    global $wpdb;
    $uploads_dir = wp_upload_dir();
    if ( isset( $_FILES['appform'] ) ) {
    if ( $upload = wp_upload_bits( $_FILES['appform']['name'], null, file_get_contents( $_FILES['appform']['tmp_name'] ) ) ) {
    echo $upload['url'];
    }
    }
    die;
    }

    add_action( 'woocommerce_checkout_process', 'bbloomer_validate_new_checkout_field' );

    function bbloomer_validate_new_checkout_field() {
    if ( empty( $_POST['appform_field'] ) ) {
    wc_add_notice( 'Merci d'uploader la photo 1', 'error' );
    }
    }

    add_action( 'woocommerce_checkout_update_order_meta', 'bbloomer_save_new_checkout_field' );

    function bbloomer_save_new_checkout_field( $order_id ) {
    if ( ! empty( $_POST['appform_field'] ) ) {
    update_post_meta( $order_id, '_application', $_POST['appform_field'] );
    }
    }

    add_action( 'woocommerce_admin_order_data_after_billing_address', 'bbloomer_show_new_checkout_field_order', 10, 1 );

    function bbloomer_show_new_checkout_field_order( $order ) {
    $order_id = $order->get_id();
    if ( get_post_meta( $order_id, '_application', true ) ) echo '<p><strong>Photo 1 :</strong> <a href="' . get_post_meta( $order_id, '_application', true ) . '" target="_blank">' . get_post_meta( $order_id, '_application', true ) . '</a></p>';
    }

    add_action( 'woocommerce_email_after_order_table', 'bbloomer_show_new_checkout_field_emails', 20, 4 );

    function bbloomer_show_new_checkout_field_emails( $order, $sent_to_admin, $plain_text, $email ) {
    if ( $sent_to_admin && get_post_meta( $order->get_id(), '_application', true ) ) echo '<p><strong>Photo consultant.e :</strong> ' . get_post_meta( $order->get_id(), '_application', true ) . '</p>';
    }

    /* -------------- Ajout du champ fichier 2 au checkout */

    add_action( 'woocommerce_after_order_notes', 'bbloomer_checkout_file_upload2' );

    function bbloomer_checkout_file_upload2() {
    echo '
    <p class="form-row form-row-wide">
    <label for="appform2">Uploader photo 2</label>
    <span class="woocommerce-input-wrapper">
    <input type="file" id="appform2" name="appform2" accept="image/*">
    <input type="hidden" name="appform2_field" />
    </span>
    </p>';

    wc_enqueue_js( "
    $( '#appform2' ).change( function() {
    if ( this.files.length ) {
    const file = this.files[0];
    const formData = new FormData();
    formData.append( 'appform2', file );
    $.ajax({
    url: wc_checkout_params.ajax_url + '?action=appform2upload',
    type: 'POST',
    data: formData,
    contentType: false,
    enctype: 'multipart/form-data',
    processData: false,
    success: function ( response2 ) {
    $( 'input[name=\"appform2_field\"]' ).val( response2 );
    }
    });
    }
    });
    " );
    }

    add_action( 'wp_ajax_appformupload', 'bbloomer_appformupload2' );
    add_action( 'wp_ajax_nopriv_appformupload', 'bbloomer_appformupload2' );

    function bbloomer_appformupload2() {
    global $wpdb;
    $uploads_dir = wp_upload_dir();
    if ( isset( $_FILES['appform2'] ) ) {
    if ( $upload = wp_upload_bits( $_FILES['appform2']['name'], null, file_get_contents( $_FILES['appform2']['tmp_name'] ) ) ) {
    echo $upload['url'];
    }
    }
    die;
    }

    add_action( 'woocommerce_checkout_update_order_meta', 'bbloomer_save_new_checkout_field2' );

    function bbloomer_save_new_checkout_field2( $order_id ) {
    if ( ! empty( $_POST['appform2_field'] ) ) {
    update_post_meta( $order_id, '_application', $_POST['appform2_field'] );
    }
    }

    add_action( 'woocommerce_admin_order_data_after_billing_address', 'bbloomer_show_new_checkout_field_order2', 10, 1 );

    function bbloomer_show_new_checkout_field_order2( $order ) {
    $order_id = $order->get_id();
    if ( get_post_meta( $order_id, '_application', true ) ) echo '<p><strong>Photo 2 :</strong> <a href="' . get_post_meta( $order_id, '_application', true ) . '" target="_blank">' . get_post_meta( $order_id, '_application', true ) . '</a></p>';
    }

    add_action( 'woocommerce_email_after_order_table', 'bbloomer_show_new_checkout_field_emails2', 20, 4 );

    function bbloomer_show_new_checkout_field_emails2( $order, $sent_to_admin, $plain_text, $email ) {
    if ( $sent_to_admin && get_post_meta( $order->get_id(), '_application', true ) ) echo '<p><strong>Photo compagnon/compagne :</strong> ' . get_post_meta( $order->get_id(), '_application', true ) . '</p>';
    }

    • Ce sujet a été modifié le il y a 3 mois par Magalandes.
    • Ce sujet a été modifié le il y a 3 mois par Magalandes.
    • Ce sujet a été modifié le il y a 3 mois par Magalandes.
    • Ce sujet a été modifié le il y a 3 mois par Magalandes.
    #2466130
    Joss47
    Modérateur
    Maître WordPress
    5128 contributions

    hello

    As tu tenté d’appeler ta méta de la photo2 différemment de la 1 tout simplement ?

    Utiliser des noms de métadonnées uniques : Pour chaque photo, utilise un nom de métadonnée différent. Par exemple, utilise ‘_application1’ pour la première photo et ‘_application2’ pour la seconde.

    Modifier les fonctions de sauvegarde et d’affichage : Assure toi que les fonctions qui sauvegardent et affichent les métadonnées dans le récapitulatif de commande utilisent les bons noms de métadonnées.

    Sinon…  tu as des extensions qui ajoutent des champs dans le checkout de woocommerce et qui feront le travail sans bug 🙂

    #2466153
    Magalandes
    Participant
    Initié WordPress
    2 contributions

    Bon, après avoir essayé, cela ne fonctionne toujours pas car je ne sais pas réellement là où je peux mettre un « 2 » ou pas, les éléments qui sont modifiables ou non dans ce codes PHP…

    Pouvez-vous me dire les choses que je peux ou non toucher ?

    Oui ma solution de repli était une extension mais pour avoir 2 champs distincts il faut payer et je trouve le plugin un peu cher pour l’utilisation que je souhaite en faire.

    Merci en tout cas !

    • Cette réponse a été modifiée le il y a 3 mois par Magalandes.
3 sujets de 1 à 3 (sur un total de 3)
  • Vous devez être connecté pour répondre à ce sujet.