Gibt es eine Möglichkeit, ein Bild vor Abschluss der Kaufabwicklung ohne Plugin hochzuladen?

Lesezeit: 3 Minuten

Benutzeravatar von Captain Dando
Hauptmann Dando

Ich habe dieses Plugin, das ich erstellt habe, um ein Bild hochzuladen, bevor eine Bestellung abgeschlossen werden kann, aber für mein ganzes Leben kann ich das Bild nicht hochladen. $_FILES gibt immer nichts zurück, ich bin mir aber nicht sicher warum. Ich möchte, dass der Checkout erst abgeschlossen wird, wenn das Bild hochgeladen ist, ist das überhaupt möglich? *Mir wurde gesagt, dass WooCommerce Ajax für den Warenkorb verwendet

<?php
    /*
        @package            UploadTest
        @wordpress_plugin
        Plugin Name:            UploadTest
        Plugin URI:             null
        Description:            
        Author:                 Goodship
        Version:                0.0.2
        Author URI:             www.Goodship.co.za
    */

    function add_image(){
        $testLog = fopen(plugin_dir_path( __FILE__ )."testicle.txt","w") or exit ("Unable to open file!");
        //if they DID upload a file...
        if($_FILES['testUpload']['name']){
            //if no errors...
            if(!$_FILES['testUpload']['error']){
                //now is the time to modify the future file name and validate the file
                $new_file_name = strtolower($_FILES['testUpload']['tmp_name']); //rename file
                if($_FILES['testUpload']['size'] > (1024000)) //can't be larger than 1 MB
                {
                    $valid_file = false;
                    $message="Oops!  Your file\"s size is to large.';
                }

                //if the file has passed the test
                if($valid_file){
                    //move it to where we want it to be
                    move_uploaded_file($_FILES['testUpload']['tmp_name'], plugin_dir_path( __FILE__ ).'uploads/'.$new_file_name);
                    $message="Congratulations!  Your file was accepted.";
                }
            }
            //if there is an error...
            else
            {
                //set that to be the returned message
                $message="Ooops!  Your upload triggered the following error:  ".$_FILES['testUpload']['error'];
            }
        }
        fwrite ($testLog ,$message);
        fwrite ($testLog ,var_dump($_FILES));
        fclose ($testLog);
    }

    add_action( 'woocommerce_checkout_update_order_meta', 'add_image');


    function add_checkout_notice() {
        echo    '<input type="file" name="testUpload" />';
    }
    add_action( 'woocommerce_checkout_before_customer_details', 'add_checkout_notice');

    ?>

  • Senden Sie das Checkout-Formular über Ajax?

    – Maha Dev

    9. Mai 2016 um 4:38 Uhr

  • Verwenden Sie für den Checkout-Abschluss einfach JS, um zu überprüfen, ob das Eingabefeld des Bildes leer ist oder nicht. Wenn es leer ist, setzen Sie ein disabled auf einen Checkout-Abschluss-Button, sodass Sie den Checkout nicht abschließen können. Sobald Sie das Bild hochgeladen haben (ich gehe davon aus, dass JS hier irgendwie beteiligt sein muss), entfernen Sie einfach die disabled über den Checkout-Button. Warum es nicht hochgeladen wird, keine Ahnung…

    – dingo_d

    9. Mai 2016 um 8:28 Uhr

  • @Maha Dev Die Kasse wird normal übermittelt, mit welchem ​​​​Prozess auch immer Woocommerce verwendet

    – Kapitän Dando

    9. Mai 2016 um 9:41 Uhr

  • @dingo_d das Eingabefeld ist definitiv nicht leer, aber $_FILES ist aus irgendeinem Grund

    – Kapitän Dando

    9. Mai 2016 um 9:41 Uhr

  • Sie können die Frage aktualisieren, um aufzunehmen, dass woo-commerce Ajax verwendet, um den Warenkorb zu handhaben. sonst bekommst du keine richtige antwort

    – David

    10. Mai 2016 um 0:05 Uhr

Benutzeravatar von Bhavik
Bhavik

Sie müssen die folgende Funktion in Ihrem untergeordneten Thema aufrufen.

function add_image($order_id){
  // Do your code of upload image.
} 
add_action( 'woocommerce_checkout_order_processed', 'add_image',  1, 1  );

  • Leider gab es keine Wirkung, und die Testdatei protokolliert nichts

    – Kapitän Dando

    10. Mai 2016 um 9:42 Uhr

Benutzeravatar von Sark
Sark

Die Woocommerce-Kaufabwicklung erfolgt immer über Ajax (ich bin mir nicht sicher, ab welcher Version das so ist).

PLUGIN-DIR/woocommerce/assets/frontend/checkout.js Dies ist die Datei, die für die Checkout-Aktion verantwortlich ist.

Daher ist das Hochladen von Dateien von der Checkout-Seite nicht möglich, es sei denn, Sie wollten die ändern checkout.js Datei selbst.

Wenn Sie es dennoch vorziehen, Dateien von der Checkout-Seite hochzuladen, können Sie auf diese Antwort verweisen.

Hast du dir Advanced Custom Field angesehen? https://www.advancedcustomfields.com/

Sie können leicht erreichen, was Sie zu tun versuchen.

Schau dir das an https://www.advancedcustomfields.com/resources/acfupload_prefilter/

  • Ich muss dies ohne Plugins tun, die Menge der hochgeladenen Elemente ist bei der Nachbearbeitung unbestimmbar und variiert.

    – Kapitän Dando

    9. Mai 2016 um 9:40 Uhr

1386880cookie-checkGibt es eine Möglichkeit, ein Bild vor Abschluss der Kaufabwicklung ohne Plugin hochzuladen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy