2016-05-04 10 views
8

注文が完了する前に画像をアップロードするために作成したこのプラグインがありますが、私の人生では画像をアップロードできません。 $ _FILESは常に何も返されませんが、なぜ私は確信していません。画像がアップロードされるまで、チェックアウトが完了しないようにしたいと思います。これも可能ですか? *私はwoocommerceカートプラグインなしでチェックアウト完了前に画像をアップロードする方法はありますか?

<?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'); 

    ?> 
+1

あなたはajax経由でチェックアウトフォームを送信していますか? –

+0

チェックアウト完了のために、JSを使用して画像の入力フィールドが空であるかどうかを確認するだけです。それが空の場合は、チェックアウトを完了できないように、完全なチェックアウトボタンに '無効 'を入れてください。その後、イメージをアップロードしたら(JSは何とかここに参加しなければならないと仮定しています)、チェックアウトボタンから 'disabled'を削除してください。 –

+0

@Maha Devチェックアウトは、woocommerceのどのプロセスでも使用されます。 –

答えて

1

のためのAJAXを使用していることを言われてきたあなたは、高度なカスタムフィールドを見て与えられたことがありますか? https://www.advancedcustomfields.com/

あなたは何をしようとしているのかを簡単に達成できます。

は、あなたがあなたの子供をテーマに機能の下に呼び出す必要があり、このhttps://www.advancedcustomfields.com/resources/acfupload_prefilter/

+0

プラグインなしでこれを行う必要があります。変化します。 –

4

を見てください。

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

残念ながら、何の効果もなく、テストファイルには何も記録されません –

2

Woocommerceチェックアウトは常に(私はそれがこのようにされて何のバージョンからわからない)

PLUGIN-DIR/woocommerce/assets/frontend/checkout.jsこれはチェックアウトのアクションを担当していたファイルであるAjaxを経由して起こるでしょう。

checkout.jsファイルを自分で修正する場合を除き、チェックアウトページからファイルをアップロードすることはできません。

チェックアウトページからファイルをアップロードしたい場合は、answerを参照してください。

+0

面白い、ありがとう –

関連する問題