2016-09-15 11 views
1

woocommerce製品にもう1つのダウンロード可能なファイルをアップロードしようとしています。私はすでに製品にダウンロード可能なファイルが1つあり、もう1つ追加したいと思っています。このためWooCommerceの製品用にプログラムでダウンロード可能なファイルを追加する

私は、次のコードを使用しています:正しい方法でこの機能アップロードファイルは、

if($_FILES){ 
$attachment_id = media_handle_upload('abe_update_epub', $post_id); 
    if (is_wp_error($attachment_id)) { 
     $errors = $attachment_id->get_error_messages(); 
     foreach($errors as $error){ 
      echo $error; 
     } 
    echo 'There was an error uploading the image'; 
    } else { 
    // to get exiting file/Old file 
    $abe_file = get_post_meta($abe_post_id, '_downloadable_files', true); 
     foreach($abe_file as $abe){ 
      $name = $abe['name']; 
      $url = $abe['file']; 
     } 
    // This is my new file which i want to upload also 
     $file_name = 'Epub Files'; 
     $file_url1 = wp_get_attachment_url($attachment_id); 
     $files[md5($file_url)] = array(
      'name' => $file_name, 
      'file' => $file_url 
     ); 
     update_post_meta($post_id, '_downloadable_files', $files); 
     echo 'The image was uploaded successfully!'; 
    } 
} 

しかし、それは新しいものに古いファイルを置き換えます。

どうすればこの問題を解決できますか?
このスクリプトで何が間違っていますか?

ありがとうございました

+0

@LoicTheAztec今では、のために感謝を働いている:あなたは、これが働いて更新されたコードである...($abe_post_idとしては未定義だった)$post_idはあなたの製品のIDであることを確認するために

を持っています私の人生を救う。バリエーション製品をアップロードするためにこれを実装できますか? –

答えて

3

- 決定的なアップデート3

あなたのコード内の多くのミスがありました:
- 未定義$abe_post_id置き換え:get_post_meta()機能で2つのミスがあり、あなたのコードで

は、によって定義される。$post_id。 - 配列(文字列ではない)であるため、3番目の引数"true"を削除しました。

$abe_fileの出力配列は、この例に類似した構造を有する三次元アレイである。

array( 
    0 => array(
     "67f3fe902b6c55ac07b92ac804d1a9c8" => array(
      "name" => "filename1" 
      "file" => "http://www.domain.tld/wp-content/uploads/woocommerce_uploads/2016/09/file1.pdf" 
     ), 
     "95ce074e798b2e9d6d0d4cbce02f0497" => array(
      "name" => "filename2" 
      "file" => "http://www.domain.tld/wp-content/uploads/woocommerce_uploads/2016/09/file2.pdf" 
     ) 
    ) 
); 

あなたは前のようにforeachループでこの配列を反復する必要はありません、新しいファイルを挿入するだけだからです。

if($_FILES){ 
$attachment_id = media_handle_upload('abe_update_epub', $post_id); 
    if (is_wp_error($attachment_id)) { 
     $errors = $attachment_id->get_error_messages(); 
     foreach($errors as $error){ 
      echo $error; 
     } 
     echo 'There was an error uploading the image'; 
    } else { 

     // Get exiting array of downloadable files. IMPORTANT: 
     // 1) => Removed "true" condition as it's an array (ot a string) 
     // 2) => As "$abe_post_id" is not defined, I have replace it with "$post_id" 
     $abe_file = get_post_meta($post_id, '_downloadable_files'); // removed "true" 

     // NEW FILE: Setting the name, getting the url and and Md5 hash number 
     $file_name = 'Epub Files'; 
     $file_url = wp_get_attachment_url($attachment_id); 
     $md5_num = md5($file_url); 

     // Inserting new file in the exiting array of downloadable files 
     $abe_file[0][$md5_num] = array(
      'name' => $file_name, 
      'file' => $file_url 
     ); 

     // Updating database with the new array 
     update_post_meta($post_id, '_downloadable_files', $abe_file[0]); 

     // Displaying a success notice 
     echo 'The image was uploaded successfully!'; 
    } 
} 
0

update_post_metaはmeta全体を書き換えます。

古いデータ($ abe_file)と新しいファイル($ file)を新しい配列に結合し、update_post_metaを使用して書き込む必要があります。

+0

お返事ありがとうございます。どうすれば新しい配列に参加できますか?私は試してみましたが成功しませんでした。 –

関連する問題