web-dev-qa-db-ja.com

カスタム投稿タイプの画像サイズの削除

私はプラグインを使わずにこれに取り組みますが、アクションとフィルタ

カスタム投稿タイプに基づいてWordPressによって生成された余分な画像サイズを削除する方法はありますか?私はintermediate_image_sizes_advancedフィルタを使用しようとしていますが、$postまたはpost_typeにアクセスできるようには見えません。だから私はそのような機能を使用しています:

function filter_image_sizes($sizes) {
    global $post;
    global $post_type;

    if($post->post_type == 'cpt_slides' || $post_type == 'cpt_slides'){
        unset( $sizes['thumbnail']);
        unset($sizes['medium']);
        unset( $sizes['large']);
    }

    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'filter_image_sizes');

推論/状況

おすすめの画像を使用してユーザーが "スライド"をアップロードできるようにするスライドのカスタム投稿タイプ(画像スライダーなど)を作成しました。カスタムの画像サイズもいくつかありますが、スライド専用のサイズです。スライド画像は1つの静的なサイズになるので、WordPressがこれらの余分な画像サイズをすべて生成することは望ましくありません。

2
Howdy_McGee

このフィルタはうまくいくでしょう intermediate_image_sizes

注:このソリューションは、編集後の画面から画像をアップロードしている場合に有効です。 (WP-3.8.1のlocalhostでテスト済み)

add_filter( 'intermediate_image_sizes', 'ravs_slider_image_sizes', 999 );
function ravs_slider_image_sizes( $image_sizes ){

    // size for slider
    $slider_image_sizes = array( 'your_image_size_1', 'your_image_size_2' ); 

    // for ex: $slider_image_sizes = array( 'thumbnail', 'medium' );

    // instead of unset sizes, return your custom size for slider image
    if( isset($_REQUEST['post_id']) && 'your_custom_post_type' === get_post_type( $_REQUEST['post_id'] ) )
        return $slider_image_sizes;

    return $image_sizes;
}
8
Ravinder Kumar

問題の一部は、このフィルタが複数の場所、またはおそらく投稿がクエリに関連付けられていない場所から呼び出される可能性があることです。実際、使用されているフィルタは、添付ファイルが最初にメタデータの一部として作成されたときにのみ使用されているように見えます。

ちょっとテストしてみると、画像をアップロードしているときに$ postと$ post_type変数がこのフィルタが使われている場所に設定されていないことがわかります。おそらくこれは、メディアのアップロードがプッシュフォーム送信とページの再ロードではなく、JavaScriptを介したバックグラウンドプロセスとして行われるために発生します。

WordPressは実際にはこの種のフィルタリングを処理するようには設定されていません。おそらく今後のアップデートのために考慮すべきことがあります。WordPressTracにチケットを送信してそこでアドバイスを得ることをお勧めします。

基本的にWordPressはあなたが複数の場所で同じファイルを簡単に使用できるようにそれらが接続されるかもしれない投稿とは無関係にあなたのメディアエレメントを保存しています。 WordPressで生成されたサイズをより細かく調整できるようにする場合は、ブログ投稿用に画像をアップロードした後、その画像を他の場所でおすすめの画像として再利用したいという状況に陥る可能性があります。メディアライブラリはこのようなものをうまく処理するように設定されていますが、ケースバイケースでサムネイルを再生成するようには設定されていません。必要なサムネイルをすべて生成するように設定されています。

これを処理する最も簡単な方法は、メディアをアップロードするときにカスタム投稿タイプのメタボックスに独自のメディアアップロード機能を使用することです。これにより、通常のWordPressサムネイルプロセスを回避して、ファイルがアップロードされたときに必要なサイズだけを作成できます。これは、そのプロセスを支援する素晴らしいチュートリアルです。 http://wp.tutsplus.com/tutorials/attaching-files-to-your-posts-using-wordpress-custom-meta -boxes-part-1 /

0
Nullvariable