WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Унаследование имени файла при загрузки из поля

Помогите пожалуйста с кодом, дописать его. Никак не пойму как сделать, что бы при загрузки файла на сервер, он наследовал название из поля которое я вставил в уже готовый код.
Сразу оговорюсь был взят за основу легкий плагин, написанный одним человечком как пример загрузки файлов на сервер. Вот ссылка если что: https://tokmakov.msk.ru/blog/item/373
Я хочу сделать, что бы файл, переименовывался присваивая имя из того поля, в котором пользователь будет писать комментарий перед выбором файла для загрузки, поле должно быть обязательным.
Вот код php-файла

<?php
/*
Plugin Name: Загрузка файлов
Plugin URI: https://tokmakov.msk.ru
Description: Позволяет загружать файлы зарегистрированным пользователям.
Version: 1.0
Author: Евгений Токмаков
Author URI: https://tokmakov.msk.ru
*/

register_activation_hook(__FILE__, function() {
	// проверяем права пользователя на активацию плагинов
	if (!current_user_can('activate_plugins')) {
		return;
	}
	// для загрузки файлов из публичной части у всех
	// пользователей должны быть права на это
	$subscriber = get_role('subscriber');
	if (!$subscriber->has_cap('upload_files')) {
		$subscriber->add_cap('upload_files');
	}
});

register_deactivation_hook(__FILE__, function() {
	// проверяем права пользователя на деактивацию плагинов
	if (!current_user_can('deactivate_plugins')) {
		return;
	}
	// удаляем права на загрузку файлов, которую
	// предоставили на этапе активации плагина
	$subscriber = get_role('subscriber');
	if ($subscriber->has_cap('upload_files')) {
		$subscriber->remove_cap('upload_files');
	}
});
/*
 * Подключаем js-файл, который будет загружать файлы с использованием AJAX
 */
add_action('wp_enqueue_scripts', function () {
	wp_enqueue_script(
		'tokmakov-upload-media-js',  // будет зарегистрирован под этим именем
		plugin_dir_url( __FILE__ ) . 'script.js',
		['jquery'],  // должен быть подключен после jquery
		null, // версии нет, поэтому null
		true // подключаем перед закрывающим тегом body
	);
	// передаем на сторону клиента объект tokmakov_upload_media,
	// который содержит все необходимое для работы js-кода
	$config = array(
		'upload_url'    => admin_url('async-upload.php'),
		'ajax_url'      => admin_url('admin-ajax.php'),
		'nonce_upload'  => wp_create_nonce('media-form'),
		'nonce_remove'  => wp_create_nonce('remove-media'),
		'nonce_message' => wp_create_nonce('admin-message'),
	);
	wp_localize_script(
		'tokmakov-upload-media-js',
		'tokmakov_upload_media',
		$config
	);
	// подключаем файл стилей, чтобы красиво оформить наш блок загрузки
	wp_enqueue_style(
		'tokmakov-upload-media-css', // будет зарегистрирован под этим именем
		plugin_dir_url(__FILE__) . 'style.css'
	);
});
/*
 * Регистрируем шорткод [tokmakov-upload-media], который позволит вставить форму
 * загрузки файлов в любое место
 */
add_shortcode('tokmakov-upload-media', function () {
	$html = '';
	if (is_user_logged_in()) {
		$html =
<<<HTML
 <input type="text"/>
	<div class="tokmakov-upload-media">
		<span class="loader"></span>
		<span class="result"></span>
		<span class="preview"></span>
		<span class="upload">
			<input type="file" accept="image/*,audio/*,video/*">
			<button>Загрузить</button>
		</span>
	</div>
HTML;
	}
	return $html;
});
/*
 * Удаляем ранее загруженный файл, если пользователь передумал
 */
add_action('wp_ajax_tokmakov_remove_media', function () {
	check_ajax_referer('remove-media');
	$file_id = filter_var($_POST['file_id'], FILTER_VALIDATE_INT);
	if (!$file_id) {
		wp_send_json_error(
			['message' => 'Некорректный идентификатор файла']
		);
	}
	if (false === wp_delete_attachment($file_id, true)) {
		wp_send_json_error(
			['message' => 'Ошибка при удалении']
		);
	} else {
		wp_send_json_success(
			['message' => 'Файл успешно удален']
		);
	}
});
/*
 * Отправляем почтовое сообщение администратору о загрузке файла
 */
add_action('wp_ajax_tokmakov_upload_media', function () {
	check_ajax_referer('admin-message');
	$file_id = filter_var($_POST['file_id'], FILTER_VALIDATE_INT);
	$author_id = filter_var($_POST['author_id'], FILTER_VALIDATE_INT);
	if ( ! ($file_id && $author_id)) {
		wp_send_json_error(
			['message' => 'Некорректные данные файла или пользователя']
		);
	}

	$email= get_option('admin_email');
	$subject = 'Загружен новый файл';
	$user = get_user_by('id', $author_id);
	$user_name = $user->data->user_nicename;
	$user_mail = $user->data->user_email;
	$message = sprintf(
		'Загружен новый файл пользователем %s (%s). Ссылка на файл: %s',
		$user_name,
		$user_mail,
		wp_get_attachment_url($file_id)
	);
	$result = wp_mail($email, $subject, $message);

	if ($result) {
		wp_send_json_success(
			['message' => 'Сообщение администратору успешно отправлено']
		);
	} else {
		wp_send_json_error(
			['message' => 'Ошибка при отправке сообщения администратору']
		);
	}
});
//В результате работы шорткода на страницу будет добавлен html-код:
<div class="tokmakov-upload-media">
	<span class="loader"></span>
	<span class="result"></span>
	<span class="preview"></span>
	<span class="upload">
		<input type="file" accept="image/*,audio/*,video/*">
		<button>Загрузить</button>
	</span>
</div>

Добавленное поле в коде от которого должно наследоваться имя файла

<input type="text"/>

А вот код Java-скрипта:

jQuery(document).ready(function($) {
	// при клике на кнопке отправляем ajax-запрос
	$('.tokmakov-upload-media button').on('click', function() {
		var $button = $(this);
		var $block = $button.parent().parent();
		var $upload = $block.children('span.upload');
		var $input = $upload.children('input[type="file"]');
		var $preview = $block.children('span.preview');
		var $result = $block.children('span.result');
		// очищаем сообщение о предыдущих загрузках
		$result.empty();
		// если файл был выбран — загружаем его на сервер
		if ($input.prop('files').length) {
			// данные, которые будем отправлять на сервер
			var data = new FormData();
			data.append('action', 'upload-attachment');
			data.append('async-upload', $input.prop('files')[0]);
			data.append('_wpnonce', tokmakov_upload_media.nonce_upload);
			// отправляем ajax-запрос
			$.ajax({
				url: tokmakov_upload_media.upload_url,
				type: 'POST',
				data: data,
				processData: false,
				contentType: false,
				dataType: 'json',
				beforeSend: function() {
					// перед отправкой запроса скрываем поле выбора
					// файла и кнопку отправки
					$upload.hide();
					// показываем сообщение, что идет загрузка; это
					// нужно для больших файлов
					$result.html('Загрузка файла …');
				},
				success: function(response) {
					if (response.success) {
						$result.html('Файл успешно загружен');
						// показываем ссылку для просмотра файла
						var attr = {href: response.data.url, target: '_blank'};
						$('<a>', attr).text('Открыть файл').appendTo($preview);
						$preview.append(' '); // пробел между ссылками
						// показываем ссылку для удаления файла...
						var $remove = $('<a>', {href: '#'}).text('Удалить файл').appendTo($preview);
						// ...и назначаем для нее обработчик события
						$remove.on('click', function (e) {
							e.preventDefault();
							var data = new FormData();
							data.append('action', 'tokmakov_remove_media');
							data.append('file_id', response.data.id);
							data.append('_wpnonce', tokmakov_upload_media.nonce_remove);
							$.ajax({
								url: tokmakov_upload_media.ajax_url,
								type: 'POST',
								data: data,
								processData: false,
								contentType: false,
								dataType: 'json',
								success: function(response) {
									$result.html(response.data.message);
									if (response.success) {
										$preview.empty();
										// предлагаем загрузить другой файл
										$input.val('');
										$upload.show();
									}
								}
							});
						});
						// отправляем сообщение администратору о загрузке файла
						var data = new FormData();
						data.append('action', 'tokmakov_upload_media');
						data.append('file_id', response.data.id);
						data.append('author_id', response.data.author);
						data.append('_wpnonce', tokmakov_upload_media.nonce_message);
						$.ajax({
							url: tokmakov_upload_media.ajax_url,
							type: 'POST',
							data: data,
							processData: false,
							contentType: false,
							dataType: 'json',
						});
					} else {
						$result.html('Ошибка при загрузке файла');
						// предлагаем загрузить еще раз
						$input.val('');
						$upload.show();
					}
				},
				error: function () {
					$result.html('Обратитесь к администратору');
				}
			});
		} else {
			$result.text('Выберите файл для загрузки');
		}
	});
});

Помогите пожалуйста с правильностью до писания кода к этому плагину. Я только недавно начал обучение в голове небольшая "каша" и не как не могу сообразить, как реализовать данную тему. Посмотрел на вашем сайте, вот тут вроде что-то похожее, но так и не понял, применимо это к моей теме или нет (хук wp_unique_filename). Вот страница https://wp-kama.ru/question/kak-pomenyat-nazvanie-imya-zagruzhaemogo-fajla
Если не затруднит, объясните более подробнее, что, да как. Пожалуйста!

0
fishka333
29 июня 2020

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация