TECHBLOG

WordPress > 標準設定

画像アップロードに関する初期設定

Create:

Update:

Category:WordPress標準設定

Series:WordPress初期設定

[ Version.19 ]

概要

サイト内検索の標準仕様を頻出仕様に初期設定。

全サイト共通設定により、functions.php に記載せず functions_init.php に記述しinclude。

functions.php
include_once 'xxx/functions_init.php';

以下、functions_init.php

画像アップロード時にWebP自動生成

プラグインは使用しません。

※ 2022年6月15日(Internet Explorer撤廃記念日)以降は、pngやjpgの圧縮も行っていません。

add_filter('wp_generate_attachment_metadata', function ($metadata) {
	$upload_dir = wp_upload_dir();
	$upload_dir = trailingslashit($upload_dir['path']);
	$uploaded_file_path = $upload_dir . $metadata['file'];
	$image_paths = [];
	if (in_array(exif_imagetype($uploaded_file_path), [1, 2, 3])) {
		$image_paths[] = $uploaded_file_path;
		foreach ($metadata['sizes'] as $size) {
			$image_paths[] = $upload_dir . $size['file'];
		}
		foreach ($image_paths as $image_path) {
			switch (mime_content_type($image_path)) {
				case 'image/jpeg':
					$img = imagecreatefromjpeg($image_path);
					break;
				case 'image/png':
					$img = imagecreatefrompng($image_path);
					break;
				case 'image/gif':
					$img = imagecreatefromgif($image_path);
					break;
				default:
					break;
			}
			imagewebp($img, $image_path . '.webp');
		}
	}
	return $metadata;
});

exif_imagetype($uploaded_file_path)は、外部投稿がある場合は使用してはいけませんが、このケースでは大丈夫です。軽量な処理を優先。

ちなみに、in_arrayの第2引数は「1:gif、2:jpg、3:png」を表しています。

生成された画像はhtaccessで表示しています。

削除時はwebpも削除

add_action('delete_attachment', function ($attachment_id) {
	$metadata = wp_get_attachment_metadata($attachment_id);
	$upload_dir = wp_upload_dir();
	$upload_dir = trailingslashit($upload_dir['path']);
	$image_paths = [];
	$image_paths[] = $upload_dir . $metadata['file'] . '.webp';
	foreach ($metadata['sizes'] as $size) {
		$image_paths[] = $upload_dir . $size['file'] . '.webp';
	}
	foreach ($image_paths as $image_path) {
		if (file_exists($image_path)) {
			wp_delete_file_from_directory($image_path, $upload_dir);
		}
	}
});
loading