web-dev-qa-db-ja.com

メディアアップローダーにカスタムイメージサイズを使用させる方法

私は自分のカスタムカテゴリ画像プラグインにメディアアップローダを実装しましたが、カテゴリ専用に設定した自分のカスタム画像サイズを強制的に使用できるかどうか疑問に思いました。

enter image description here

...上のスクリーンショットでは、[サイズ]列に[カテゴリ画像(80 x 80)]のみが含まれ、自動的に選択されるようにしたいと思います。

その「カテゴリ画像」をリストに追加した方法を以下に示します。

add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' );

function custom_image_sizes_choose( $sizes ) {  
    $custom_sizes = array(  
        'category-image' => 'Category Image'  
    );
    return array_merge( $sizes, $custom_sizes );  
}

その関数で私が$custom_sizesを返すだけなら、それはすべてのメディアアップローダコンテキストに影響します。カテゴリー画像を設定するときだけでなく、投稿 - >メディアを追加。

これが私のプラグインにMedia Uploaderを実装した方法です。

add_action( 'admin_init', 'cat_image_options_setup' );

//------------------------------------------------
// Setup category image media picker
//------------------------------------------------
function cat_image_options_setup() {
    global $pagenow;
    if ( 'media-upload.php' == $pagenow || 'async-upload.php' == $pagenow ) {
        // Now we'll replace the 'Insert into Post Button inside Thickbox' 
        add_filter( 'gettext', 'replace_thickbox_text' , 1, 2 );
    }
}

//------------------------------------------------
// Replace the media picker button text
//------------------------------------------------
function replace_thickbox_text( $translated_text, $text ) { 
    if ( 'Insert into Post' == $text ) {
        $referer = strpos( wp_get_referer(), 'cat_image_settings' );
        if ( $referer != '' ) {
            return __( 'Add as a category image', 'ddr' );
        }
    }

    return $translated_text;
}

それを達成するための方法は?ありがとうございます。

PS。誰かがそのメディアアップローダを実装するためのより良い方法を知っているならば、私に知らせてください。今はどういうわけか古いメディアアップローダウィンドウを使用していますが、Posts - > Add Mediaの場合とは異なります。

4
micadelli

add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' );を呼び出すときは、あなたの調査スキルを使ってif(thisweretrue) add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' );を呼び出すのが最善であることを確認してください。私はあなたの特定の状況が正確にはわからないからです。

私は実際に私が必要なものを手助けするカスタムサイズを設定するためにあなたの解決策を使うことができました。私のシナリオでは私が作成したカスタムメタボックスがあり、そのカスタムメタボックスではuploadimg_pt('mymetaboxfieldname');のような呼ばれるjavascript onclickがあります。メディアライブラリから画像を取得するために使用したJavaScriptは次のとおりです。

function uploadimg_pt(pid) {
    window.send_to_editor = function(html) {
        imgurl = jQuery('img',html).attr('src');
        jQuery('#'+pid).val(imgurl);
        tb_remove();
    }
    formfield = jQuery('#'+pid).attr('name');
    tb_show('', 'media-upload.php?type=image&pid='+pid+'&TB_iframe=true');
    return false;
}

このjavascriptを使用すると、iframeを生成するライトボックスでメディアマネージャが開きます。次に、そのpidを関数呼び出しの引数に取り、そのiframeを生成するときにそれをURLに入れます。生成されたそのiframeでは、テンプレート内の関数ファイルも呼び出されます。それで私がしたことは私の関数ファイルの中にifステートメントを次のように設定することでした:

if($_GET['pid'] == "mymetaboxfieldname"){
    add_filter( 'image_size_names_choose', 'custom_image_size_large' );
}
function custom_image_size_large( $sizes ) {
    $custom_sizes = array(  
        'large' => 'Large'  
    );
    return $custom_sizes;  
}

私は大きなサイズしか必要としなかったので、それが私が返したものです。

私はあなたの正確なシナリオを知りません、しかし、私はこれがあなたの中であなたが何を必要としているのかを理解するのに役立つことを願っています。

1
jaysauce