2016-09-15 2 views
1

Я пытаюсь загрузить еще один загружаемый файл в продукт woocommerce. У меня уже есть один загружаемый файл в моем продукте и вы хотите добавить еще один.Добавление программно более загружаемых файлов для продуктов в 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 теперь работает, спасибо за спасая мою жизнь. могу ли я реализовать это для загрузки продуктов вариаций. –

ответ

3

- Definitive Update 3

Было много ошибок в коде:

В вашем коде есть 2 ошибки в get_post_meta() функции:
- Заменено неопределенные $abe_post_id по определению $post_id. - Удален третий аргумент "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" 
     ) 
    ) 
); 

Вам не нужно повторять этот массив в цикле Еогеаспа, как и раньше, потому что вы просто хотите вставить в него свой новый файл. Вы должны быть уверены, что $post_id является идентификатором вашего продукта (как $abe_post_id был не определен) ...

Это работает обновленный код:

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 переписывает мета в целом.

Вы должны присоединиться к старым данным ($ abe_file) и новому ($ file) в новом массиве и записать его с помощью update_post_meta.

+0

Спасибо за ответ, вы можете мне помочь, как мне присоединиться к новому массиву? я пробовал, но не успел. –

Смежные вопросы