web-dev-qa-db-ja.com

一部のカスタム投稿タイプでデフォルトの画像サイズの生成を無効にする方法

私はカスタム投稿タイプを使用しました。ここでは、「サムネイル」、「中」、「大」のサイズは不要です。私はこのサイズを無効にして関数またはプラグインを作成する必要があります。ここで、各カスタム投稿タイプに必要な画像サイズを設定できます。

私の最初のステップは、wp-includes/media.phpからget_intermediate_image_sizes関数をフックすることです。このコードをfunctions.phpに追加しましたが、動作しません:(

add_filter('get_intermediate_image_sizes', 'get_intermediate_image_sizes_fixed');
function get_intermediate_image_sizes_fixed() {
    global $_wp_additional_image_sizes;
    //$image_sizes = array('thumbnail', 'medium', 'large'); // Standard sizes
    $image_sizes = array();
    if ( isset( $_wp_additional_image_sizes ) && count( $_wp_additional_image_sizes ) )
        $image_sizes = array_merge( $image_sizes, array_keys( $_wp_additional_image_sizes ) );
return apply_filters( 'intermediate_image_sizes', $image_sizes );
}   

UPD: media.phpのこの行を編集しています。変更後のデフォルトタイプは生成されません。

$image_sizes = array('thumbnail', 'medium', 'large');

しかしどのように仕事を私のフックにするのですか?

12
Bohdan Hdal

現時点での唯一の解決策は、すべての中間画像サイズを無効にすることです。

add_filter( 'intermediate_image_sizes', '__return_empty_array', 99 );

そして、投稿タイプに応じて、 'wp_generate_attachment_metadata'にフックして手動で生成します。そこでは、添付ファイルのID(そしてその親の投稿)にアクセスできます。

function do_your_stuff( $data, $attachment_id ) {
  // generate intermediate images

  return $data;
}

add_filter( 'wp_generate_attachment_metadata', 'do_your_stuff', 10, 2 );
7
scribu