Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Не обязательное прикрепление файла к цифровому товару
5ответ(ов) в теме
Дима Уткин
не в сети 5 лет
На сайте с 28.04.2016
Участник
Тем 22
Сообщения 75
1
11:01

Здравствуйте. Пытаюсь сделать универсальную форму добавления товара. Т.е чтобы была возможность добавить файл по желанию. Выбрал в админке "цифровой товар", но невозможно создать товар не прикрепив 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);

    }
}

0
Дима Уткин
не в сети 5 лет
На сайте с 28.04.2016
Участник
Тем 22
Сообщения 75
2
05:09

Так как все-таки снять это ограничение на добавление файла? Как не принуждать к добавлению?

0
Дима Уткин
не в сети 5 лет
На сайте с 28.04.2016
Участник
Тем 22
Сообщения 75
3
06:24

Выход из проблемы нашли, но не до конца. В настройках выставили тип товаров - физические товары и услуги и добавили еще одно поле в форму добавления товара с типом "файл". Теперь в публикации товара есть "Выгрузить загруженный файл". Допустим это можно как-то скрыть какими-либо средствами, ок. Теперь нужно, чтобы ссылка на этот файл приходила покупателю по емейл. Нашел файл /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>';

0
Дима Уткин
не в сети 5 лет
На сайте с 28.04.2016
Участник
Тем 22
Сообщения 75
4
14:36

Подскажите пожалуйста как все-таки выгрузить ссылку в письмо)

0
Вова (Otshelnik-Fm)
не в сети 3 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
5
14:37

Через echo

0
Тема закрыта. Публикация новых сообщений запрещена.