web-dev-qa-db-ja.com

カスタム投稿タイプに応じたMedia uploaderの画像サイズフィルタリング

管理投稿編集ページで画像のアップロードが必要なカスタム投稿タイプが3種類あります。

各タイプには独自の画像サイズ設定があります。まあ言ってみれば:

  • 'ニュース'タイプ=>必要な写真サイズ:700x320px
  • '仕事'タイプ=>必要な写真サイズ:700x430px
  • 「プレス」タイプ=>必要な画像サイズ:460x600px

デフォルトの画像サイズ設定を削除し、Media Uploaderにこれら3つの新しい設定を追加することに成功しましたが、サイズに関する設定はユーザーに選択されたくないため、ラジオボタンとして表示する必要はまったくありません。写真をアップロードしています。

代わりに私が欲しいのは、Media Uploaderに実際の投稿のカスタムタイプに従って正確な画像サイズ設定をすぐに設定させることです。ユーザーの介入は一切必要ありません。

これは可能ですか?

Media UploaderのIframe内からpost_typeを照会しようとしましたが、カスタムタイプを取得しようとすると、「添付」の投稿タイプ(アップロードしようとしている写真の投稿タイプであるため意味があります)になります投稿しようとしています.

カスタムタイプの投稿を取得できないと、Media Uploaderでサイズを適切に設定する方法がわかりません。

どうやって動かすのか私にはわからない。任意の助けがいただければ幸いです。

これが私のスクリプトです。

function media_image_delete_sizes($sizes) 
{
    unset($sizes['thumbnail']);
    unset($sizes['medium']);
    unset($sizes['large']);

    return $sizes;
}
add_filter('image_size_names_choose', 'media_image_delete_sizes');

add_image_size( 'news-size' , 700, 320,true);
add_image_size( 'work-size' , 700, 430,true);
add_image_size( 'press-size', 460, 600,true);

function media_image_add_sizes($sizes) 
{
    // I would like not to show any of these new image sizes 
    // (I will probably hide them via css or jQuery)    
    $addsizes = array(
        "news-size"  => "News  (700x320)",
        "work-size"  => "Works (700x430)",
        "press-size" => "Press (460x600)"
    );
    $newsizes = array_merge($sizes, $addsizes);

    return $newsizes;
}
add_filter('image_size_names_choose', 'media_image_add_sizes');


function theme_default_image_size() 
{       
    //This variable will retrieve the post_type of the picture post, not the one of the 
    //underlying CPT post
    global $post_type;

    // Here is the place where I tried to place the conditional return
    // but I just can't succeed in retrieving the CPT post_type as I always get "attachment".

    if     ($post_type == "news" ){ return 'news-size';}
    elseif ($post_type == "work" ){ return 'work-size';}
    elseif ($post_type == "press"){ return 'press-size';}
    else                          { return 'this-doesnt-work';};
}
add_filter( 'pre_option_image_default_size', 'theme_default_image_size' );

ありがとうございました。

1
Baylock

Themes functions.phpファイルに次のコードを追加してください。

function theme_set_default_image_size() {
global $post_type;
$custom_image_size = 'medium';   

if($post_type == 'news')
    $custom_image_size = 'news_image_size';
else if($post_type == 'product')
    $custom_image_size = 'product_image_size';
else if($post_type == 'service')
    $custom_image_size = 'service_image_size';

return $custom_image_size;
}
add_filter( 'pre_option_image_default_size', 'theme_set_default_image_size' );
1
Vinod Dalvi