サポート » 使い方全般 » 投稿タイプごとに必要な画像サイズのみ自動生成させたい

  • 解決済 Oracle

    (@kratecre)


    WordPress 4.9.10 までは、以下のコードで投稿タイプごとに必要な画像サイズのみ自動生成させることができたのですが、WordPress 5.1.1 と WordPress 5.2.2 では、add_image_size で追加したサイズも含め全ての画像サイズが自動生成されてしまいました。

    
    投稿タイプ product
    
    // 画像サイズ product_thumb を追加
    add_image_size('product_thumb', 1000, 580, true);
    
    function reduce_image_sizes($sizes) {
      $type = get_post_type($_REQUEST['post_id']);
      foreach ( $sizes as $key => $value ) {
    
        if ( $type == 'product' && ($value != 'large' && $value != 'product_thumb') ) { 
          unset($sizes[$key]);
        }
    
      }
      return $sizes;
    }
    add_action('intermediate_image_sizes', 'reduce_image_sizes');
    

    WordPress 5.1.1 に Classic Editor プラグインをインストールして画像をアップロードすると、これまでどおり必要な画像サイズのみ自動生成させることができました。

    また、単純に投稿タイプの判定をなくして intermediate_image_sizes フィルターや intermediate_image_sizes_advanced フィルターにフックすると不要な画像サイズを削除できました。

    
    function reduce_image_sizes($sizes) {
      unset( $sizes['thumbnail'] );
      unset( $sizes['medium'] );
      return $sizes;
    }
    add_filter( 'intermediate_image_sizes_advanced', 'reduce_image_sizes' );
    

    新しいブロックエディタ(Gutenberg)からアップロードした画像の投稿IDの取得・判定ができていない思うのですが、私の設計したテーマに依存した事象なのか、WordPress の仕様変更によるものなのか、わかりません。

    WordPress の仕様変更による場合、新しいブロックエディタ(Gutenberg)からアップロードした画像を投稿タイプごとに必要な画像サイズのみ自動生成させる方法は他にあるでしょうか?

    intermediate_image_sizes_advanced について調べたところ、5.1.0 から $attachment_id が引数に追加されているのですが、$attachment_id を利用して投稿タイプを判定することなどはできないでしょうか?
    [Code Reference]intermediate_image_sizes_advanced

    ご教示いただけると幸いです。どうぞ、よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    intermediate_image_sizes フックの時点では、$_REQUEST[‘post_id’] は存在しないようです。
    $_REQUEST[‘post’] を使用するといいかしれません。

    変更前:
    $type = get_post_type($_REQUEST['post_id']);

    変更後:

    $post_id = empty( $_REQUEST['post_ID'] ) ? absint( $_REQUEST['post'] ) : absint( $_REQUEST['post_ID'] );
    $type = get_post_type( $post_id );
    • この返信は4ヶ月、 1週前にishitakaが編集しました。

    ishitakaさん、早々にご回答いただきありがとうございます!

    教えていただいたコードに書き換えたところ、投稿タイプごとに必要な画像を自動生成させることができました!
    自分では解決できずに悩んでいたので質問してよかったです。本当にありがとうございます!!

    教えていただいたコードについて、きちんと理解したいのですが、
    $_REQUEST[‘post’] や $_REQUEST[‘post_ID’] を absint() で変換されていますが、
    このようにされている理由を教えていただけますでしょうか。

    function.php内で配列やオブジェクトの中身を確認する方法がわからず、
    その理由を自身で確認できませんでした。

    お手数をおかけしますが、どうぞよろしくお願いします。

    $_REQUEST[‘post’] や $_REQUEST[‘post_ID’] を absint() で変換されていますが、
    このようにされている理由を教えていただけますでしょうか。

    $_REQUEST[‘post’] が投稿 ID ではない場合を考慮して、念の為(仕様が変更されたりとか)に投稿 ID として有効な整数値に変換しています。この場合、あまり意味はないかも・・・です。(^^

    • この返信は4ヶ月、 1週前にishitakaが編集しました。

    $_REQUEST[‘post’] が投稿IDでない場合も考慮…なるほどです!とても勉強になりました。本当に、ほんとーにありがとうございました!!!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。