“推奨サイズより大きい画像を指定してください”と言われたので画像をリサイズするプログラムを組んだ話

WordPress

ぬにょす(挨拶)。

多分、アイキャッチ画像が小さいんですよね…。

PHPでプログラムを組んで、ビャーッとリサイズしちゃいました。

<?php

define('SITE_URL', 'http://example.com');
define('ROOT_PATH', '/var/www/wordpress');

define('NEW_WIDTH', 1280);

/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wordpress' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'db_user' );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'db_password' );

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($db->connect_error) {
  echo $db->connect_error;
  exit();
} else {
  $db->set_charset("utf8");
}

$sql = "SELECT P.id, P.guid FROM wp_postmeta as M";
$sql .= " LEFT JOIN wp_posts as P ON M.meta_value = P.id";
$sql .= " WHERE M.meta_key = '_thumbnail_id'";
if ($res = $db->query($sql)) {
  while ($row = $res->fetch_assoc()) {
    $path = str_replace(SITE_URL, ROOT_PATH, $row['guid']);
    if (!file_exists($path)) {
      echo $row['id'];
      echo '[File Not Exists!]';
      echo $path, PHP_EOL;
    } else {
      list($org_w, $org_h, $type) = getimagesize($path);
      $ratio = NEW_WIDTH / $org_w;
      if ($ratio > 1.0) {
        $new_w = floor($ratio * $org_w);
        $new_h = floor($ratio * $org_h);
        echo $row['id'];
        echo '[', $org_w, ',', $org_h, ']->';
        echo '[', $new_w, ',', $new_h, ']';
        echo $path, PHP_EOL;

        $org_image = null;
        switch ($type) {
          case IMAGETYPE_JPEG:
            $org_image = imagecreatefromjpeg($path);
            break;
          case IMAGETYPE_PNG:
            $org_image = imagecreatefrompng($path);
            break;
        }

        if (!$org_image) {
          echo ">> Can't load image.", PHP_EOL;
        } else {
          $canvas = imagecreatetruecolor($new_w, $new_h);
          imagecopyresampled($canvas, $org_image, 0, 0, 0, 0, $new_w, $new_h, $org_w, $org_h);

          switch ($type) {
            case IMAGETYPE_JPEG:
              imagejpeg($canvas, $path);
              break;
            case IMAGETYPE_PNG:
              imagepng($canvas, $path, 9);
              break;
          }
          imagedestroy($canvas);
          imagedestroy($org_image);
          echo ">> Resized!", PHP_EOL;
        }
      } else {
        echo $row['id'];
        echo '[', $org_w, ',', $org_h, ']->';
        echo '[Keep!]';
        echo $path, PHP_EOL;
      }
    }
  }
  $res->close();
}
$db->close();

その後、念のためRegenerate Thumbnailsを走らせて、Cocoon設定でキャッシュも削除して。

現在、サチコさんに再検証してもらってます。

これで警告が綺麗に消えてくれることを願います。

コメント

タイトルとURLをコピーしました