あなたが採用する用語が少し紛らわしいとしても、あなたは問題の分析について完全に正しいです。「画像のインスタンス」などはありません。画像を投稿に挿入した後、元の画像のタイトルやキャプションを(たとえば[メディア]メニューを介して)変更しても、投稿に挿入された画像は変更されません。納得させるには、[テキスト]タブをクリックして、生成されたHTMLコードを確認してください。
[メディアを追加]ボタンで画像を挿入すると、次のようになります。
[投稿に挿入]をクリックすると、メディアモーダルからデータが取得され、HTMLコードを生成し<img>
ます。選択したサイズに応じた正しいソースのタグ、代替テキストとしてのタイトル、および存在する場合はキャプション。このコードはTinyMCEエディターの適切な場所に挿入されます([テキスト]タブで確認してください)
「ビジュアル」タブ内に「ビュー」が作成され、ビジュアルエディター内のイメージを表します。このビューには、画像と2つのボタン(編集と削除)が表示されます。このビューにより、HTMLコードに触れることなく、画像のサイズを変更したり、他のいくつかのパラメーターを視覚的に変更したりできます。
そのため、カスタムデータを追加する場合(アタッチメントポストにアタッチされていないため、カスタムフィールドと呼ばないでください)、このHTMLコードに挿入し、ビューを変更して、このデータを視覚的に変更できるようにする必要があります。 。質問をよく理解している場合は、ページ上の特定の方法で画像を配置するデータを追加する必要があります。これにはカスタムクラスを使用できます。
生成されたHTMLコードは次のとおりです。
<img class="alignnone size-medium wp-image-10" src="http://myserver.com/wp-content/uploads/2014/08/opensource-300x259.gif" alt="opensource" width="300" height="259" />
また、サイズドロップダウンリストで「レスポンシブ」を選択して、コードを次のようにする必要があります。
<img class="alignnone size-responsive wp-image-10" src="http://myserver.com/wp-content/uploads/2014/08/opensource-300x259.gif" alt="opensource" />
これを実現する方法は次のとおりです。編集後のページに新しいスクリプトをエンキューするプラグインを作成します。
add_action( 'admin_enqueue_scripts', 'wpse16975_custom_image_view');
function wpse16975_custom_image_view($hook){
if($hook == 'post.php'){
wp_enqueue_script( 'custom_image_view', plugin_dir_url( __FILE__ ) . '/customView.js', array( 'media-views' ));
}
}
次に、customView.jsは次のようになります。
(function($, _){
var media = wp.media;
var origImageDetails = media.view.ImageDetails;
media.view.ImageDetails = origImageDetails.extend({
initialize: function() {
origImageDetails.prototype.initialize.apply( this, arguments );
this.on( 'post-render', this.responsiveSize );
this.listenTo( this.model, 'change:size', this.setReponsiveSize );
this.initSize = this.model.get('size');
},
responsiveSize: function(){
// add a "Reponsive" option to the Size dropdown setting
var $opt = $(document.createElement('option')).attr('value', 'responsive').text('Responsive');
if(this.initSize == 'responsive') $opt.attr('selected', 'selected');
this.$('.embed-media-settings select.size').append($opt);
},
setReponsiveSize: function(){
// remove width and height
if(this.model.get('size') == 'responsive') this.controller.image.set({width:null, height:null}, {silent:true});
}
});
}(jQuery, _));
そしてここに結果があります: