WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Добавить в название файла его ID и ID поста

Есть возможность изменять имена загружаемых файлов и присваивать им нужные значения

ВОПРОС: как добавить к имени файла его же ID и ID поста, куда врезаться ??
пример, было
image.jpg
нужно
image-p999-att777.jpg

Данная необходимость возникла для быстрого поиска постов по именам вложенных файлов - при обращении к сайту более 200 человек и поиску поста по имени файла, возникает большая нагрузка. Хочу искать файлы путем извлечения ID из имени файла

ранее юзал код для рандома имен, но его функционала стало мало

    /****[022] Automatic rename */
		function shapeSpace_maybe_append_random($filename) {
			$random = substr(str_shuffle('1234567890'), 0, 8);
			$append = apply_filters('usp_file_append_random', true, $filename, $random);

			if (!$append) return $filename;

			$info = pathinfo($filename);
			$ext  = (isset($info['extension']) && !empty($info['extension'])) ? '.'. $info['extension'] : '';
			$name = basename($filename, $ext) . $random;

			return $name . $ext;

		}
		add_filter('sanitize_file_name', 'shapeSpace_maybe_append_random', 10);

// ещё можно так
add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ) {
	if ( ! isset( $_REQUEST['post_id'] ) ) {
		return $file;
	}
	$id           = intval( $_REQUEST['post_id'] );
	$parent_post  = get_post( $id );
	$post_name    = sanitize_title( $parent_post->post_title );
	$file['name'] = $post_name . '-' . $file['name'];
	return $file;
}

Добавить ID родителя легко, а вот ID вложения так и не нашёл

$_REQUEST['post_id']

Заметки к вопросу:
mi13 2.5 лет назад

Это файлы которые загружаешь прямо со страницы записи?

kolshix 2.5 лет назад

Да, верно

mi13 2.5 лет назад

get_post_thumbnail_id() есть

0
kolshix
2.5 лет назад 779
  • 0

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

    Можно переименовать файл после, заменив всю необходимую информацию в скрытых полях записи-вложения

    kolshix 2.5 лет назад

    Уже спрашивал до этого но не получил ответ :
    Как в вордпрес узнать формирование (значение) id будущего вложения, поста или таксономии - может быть тут бы и помогло в вопросе.

    Andrew 2.5 лет назад

    при создании записи WordPress пользуется функцией get_default_post_to_edit( $post_type, $create_in_db )

    При $create_in_db, установленном в true, CMS стандартной функцией wp_insert_post() добавляет в базу данных новую запись со статусом "auto-draft" и возвращает полученный ID.

    kolshix 1.2 года назад

    Как всегда все через задницу, то ничего, а то все сразу.
    Решение частично помогло:
    1

    $def_postdata = get_default_post_to_edit( 'attachment', true ); // с false не работает
    $attach_get_ID = $def_postdata->ID ;

    при таком варианте возвращает ID вложения на 1 единицу больше так как по правилам WP первым создается пост со статусом AUTO-DRAFT потом INHERIT.
    Тем самым при переименовании изображения при загрузке можно сразу назначить имя файла с маской ID - ну а дальше решать уже пользователю, оставить текущий ID чтоб сделать некую маскировку изображений или сразу отнимать в php коде ЕДИНИЦУ.
    2

    $last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'wp_posts'");
    $attach_get_ID = $last->Auto_increment;

    код при единично загрузке работает отлично, а вот как при параллельной мультизагрузке покажет себя не знаю

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