Добавить программно загружаемый файл в продукты Woocommerce - PullRequest
0 голосов
/ 23 октября 2018

В своем решении я хочу максимально автоматизировать создание продукта.По моему мнению, экономия времени заключается в автоматическом добавлении загружаемого файла в продукт.

Я создал эту функцию:

function fcsp_add_downloadable_file($post_id, $post, $update){
  $post_thumbnail_id = get_post_thumbnail_id( $post_id );
  $url = get_site_url()."/wp-content/uploads/".get_the_date('Y')."/".get_the_date('m')."/".$filename_only = basename( get_attached_file( $post_thumbnail_id ) );

  update_post_meta($post_id, '_downloadable_files' , $url);
}
add_action( 'save_post', 'fcsp_add_downloadable_file', 99, 3 );

. Когда я обновляю продукт, я вижу, чтопуть к файлу сохраняется в мета-ключе _downloadable_files.Однако это просто текст, а не то, как его хранит woocommerce.Смотрите скриншот (это другой продукт, созданный с помощью интерфейса Woo Add Product:

enter image description here

. Он также не распознается woocommerca как загружаемый файл.помощь в исправлении этого очень ценится.

РЕДАКТИРОВАТЬ: Часть вторая

Это название продукта, который будет установлен:

enter image description here

Мы должны получить его из мета-тэга EXIF ​​"title" на изображении и установить его в качестве имени продукта до или во время сохранения продукта. ($filemeta['image_meta']['title'];)

1 Ответ

0 голосов
/ 23 октября 2018

Обновление 2 (добавлен оператор if, разрешающий генерацию загрузки только в один файл )

Следующий код будетавтоматическое добавление загружаемого файла, созданного из образа продукта (название загрузки происходит из заголовка данных EXIF) .

Вам лучше использовать выделенный woocommerce_admin_process_product_object экшн и доступный Объекты CRUD и методы получения / установки введены в woocommerce 3 следующим образом:

add_action( 'woocommerce_admin_process_product_object', 'auto_add_downloadable_file', 50, 1 );
function auto_add_downloadable_file( $product ){
    // Get downloads (if there is any)
    $downloads = (array) $product->get_downloads(); 

    // Only added once (avoiding repetitions
    if( sizeof($downloads) == 0 ){
        // Get post thumbnail data
        $thumb_id = get_post_thumbnail_id( $product->get_id() );
        $src_img  = wp_get_attachment_image_src( $thumb_id, 'full');
        $img_meta = wp_get_attachment_metadata( $thumb_id, false );

        // Prepare download data
        $file_title = $img_meta['image_meta']['title'];
        $file_url   = reset($src_img);
        $file_md5   = md5($file_url);

        $download  = new WC_Product_Download(); // Get an instance of the WC_Product_Download Object

        // Set the download data
        $download->set_name($file_title);
        $download->set_id($file_md5);
        $download->set_file($file_url);


        $downloads[$md5_num] = $download; // Insert the new download to the array of downloads

        $product->set_downloads($downloads); // Set new array of downloads
    }
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Протестировано и работает.

Вы также можете проверить, можно ли загрузить продукт, используя метод is_downloadable() в операторе IF при запуске внутри функции.

...