Здравствуйте. Пытаюсь сделать универсальную форму добавления товара. Т.е чтобы была возможность добавить файл по желанию. Выбрал в админке "цифровой товар", но невозможно создать товар не прикрепив zip. Начал пытаться что-то переписать в wp-recalladd-onusers-marketpublic-product.php, но все равно ничего не выходит. Ставил размер файла по умолчанию 0.1Мб, например, либо редактировал проверку на окончание zip. Но в итоге либо просто кнопка публикации не срабатывала, либо вордпресс ругался на "No file was uploaded.", либо публикация будто проходила, но в итоге в базу по сути товар не был добавлен. Я так понимаю у цифровых товаров type_products = 0, а у обычных 1. Может как-то от этого плясать? Подскажите чем-нибудь в этом коде
<?php //Проверяем соотвествие файла перепубликацией товара или перед его редактированием add_action('init_update_post_rcl','check_salefile_update_post'); function check_salefile_update_post($post){ if($post->post_type=='products'){ global $sale_file; global $ufm_options; if($_FILES['archive_file']){ $size = (isset($ufm_options['max_salefile_size'])&&$ufm_options['max_salefile_size'])?$ufm_options['max_salefile_size']:7; if ($_FILES["archive_file"]["size"] > $size*1024*1024){ wp_redirect( get_permalink($_POST['formpage']).'?error=size' ); exit; } $sale_file = wp_handle_upload( $_FILES['archive_file'], array('test_form' => FALSE) ); if(!$sale_file['file']){ if($sale_file['error']) wp_die($sale_file['error']); wp_redirect( get_permalink($_POST['formpage']).'?error=file' ); exit; } $rest = substr($_FILES['archive_file']['name'], -3);//получаем расширение файла if($rest!='zip'){ wp_redirect( get_permalink($_POST['formpage']).'?error=type' ); exit; } } } } add_filter('pre_update_postdata_rcl','add_publicdata_products_rcl',10,2); function add_publicdata_products_rcl($postdata,$data){ if(!$_POST['cats']||$data->post_type!='products') return $postdata; $postdata['post_status'] = 'pending'; return $postdata; } add_action('update_post_rcl','update_product_meta_rcl',10,3); function update_product_meta_rcl($post_id,$postdata,$update){ global $ufm_options; if($postdata['post_type']!='products') return false; rcl_update_post_custom_fields($post_id); $args = array( 'post_parent' => $post_id, 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => 'any', 'post_mime_type'=> 'image' ); $temp_gal = get_children($args); if($temp_gal){ foreach((array)$temp_gal as $key=>$gal){ $attach_list[] = $gal->ID; } $attach_list = implode(',',$attach_list); } update_post_meta($post_id, 'children_prodimage', $attach_list); update_post_meta($post_id, 'price-products', $_POST['price-products']); if(!$update){ if(!$ufm_options['type_product']) update_post_meta($post_id, 'availability_product', 'empty'); update_post_meta($post_id, 'related_products_recall', $_POST['cat'][0]); } } add_filter('public_form_rcl','products_field_publicform',10,2); function products_field_publicform($fls,$data){ global $ufm_options,$user_ID; if($data->post_type!='products') return $fls; if($user_ID) rcl_enqueue_script( 'ufm-uploader', rcl_addon_url('js/uploader.js', __FILE__),false,true ); $tds = ''; if(!$ufm_options['field_price']){ $tds .= '<tr>' . '<td>' . '<label>Стоимость<span class="required">*</span>:</label> ' . '</td><td>' . '<input type="number" maxlength="10" style="display: inline-block;" name="price-products" required id="price-products" value="'.get_post_meta($data->post_id,'price-products',1).'" style="width: 20%;"> '.rcl_get_primary_currency(1) . '</td>' . '</tr>'; } if(!$ufm_options['type_products']){ $size = (isset($ufm_options['max_salefile_size'])&&$ufm_options['max_salefile_size'])?$ufm_options['max_salefile_size']:7; if($data->post_id) $tds .= '<tr> <td> <label>Замена файла <small>(не более '.$size.' Мб, zip)</small>: </label> </td> <td> <div id="sale-file-upload" class="recall-button rcl-upload-button"> <span>'.__('Заменить файл','wp-recall').'</span> <span class="progress-bar"></span> <input id="replace-sale-file" name="uploadfile" type="file" accept=".zip"> </div>' . '</td>' . '</tr>'; else $tds .= '<tr> <td> <label>Продаваемый файл (zip/не более '.$size.'МВ):</label> </td> <td> <input accept=".zip" type="file" id="product_file" name="archive_file" class="field"/>' .'</td>' . '</tr>'; } if($tds) $fls .= '<table>'.$tds.'</table>'; return $fls; } add_filter('after_public_form_rcl','add_script_filesize_ufm',10,2); function add_script_filesize_ufm($content,$post){ global $ufm_options; if($post->post_type!='products') return $content; if($ufm_options['type_products']==0) return $content; $size = (isset($ufm_options['max_salefile_size']))?$ufm_options['max_salefile_size']:7; $content .= ''; return $content; } add_action('update_post_rcl','update_product_meta',10,3); function update_product_meta($post_id,$postdata,$update){ global $user_ID,$sale_file; if($postdata['post_type']!='products'||$update) return false; if($sale_file['file']){ $attachment = array( 'post_mime_type' => $sale_file['type'], 'post_title' => 'salefile', 'post_content' => intval($_POST['sale_price']).'/3/86400' , 'guid' => $sale_file['url'], 'post_parent' => $post_id, 'post_author' => $user_ID, 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $sale_file['file'], $post_id ); $attach_data = wp_generate_attachment_metadata( $attach_id, $sale_file['file'] ); wp_update_attachment_metadata( $attach_id, $attach_data ); do_action('upload_sale_file',$attach_id,$sale_file); } }
Выход из проблемы нашли, но не до конца. В настройках выставили тип товаров - физические товары и услуги и добавили еще одно поле в форму добавления товара с типом "файл". Теперь в публикации товара есть "Выгрузить загруженный файл". Допустим это можно как-то скрыть какими-либо средствами, ок. Теперь нужно, чтобы ссылка на этот файл приходила покупателю по емейл. Нашел файл /wp-recall/add-on/magazin/templates/order.php. Добавляю global $user_ID и пытаюсь вывести ссылку на закаченный файл в публикации, но че-т не выходит( Так как в PHP я толком не умею, то ничего не выходит. Что с этим сделать?
$value = '<a href="'.$this->get_filter_url($field['slug'],$value).'" target="_blank">'.$value.'</a>';