WEBLOG
WordPress > 標準設定
サイト内検索の標準仕様を頻出仕様に初期設定。
全サイト共通設定により、functions.php に記載せず functions_init.php に記述しinclude。
include_once 'xxx/functions_init.php';
以下、functions_init.php
プラグインは使用しません。
※ 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で表示しています。
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);
}
}
});