Masz całkowitą rację co do analizy problemu, nawet jeśli stosowane przez Ciebie warunki są nieco mylące. Nie ma czegoś takiego jak „instancja obrazu”: po wstawieniu obrazu do postu modyfikacja oryginalnego tytułu lub podpisu (na przykład za pośrednictwem menu Media) nie spowoduje modyfikacji obrazu wstawionego do posta. Aby Cię przekonać, kliknij kartę „Tekst” i sprawdź wygenerowany kod HTML.
Oto, co dzieje się po wstawieniu obrazu za pomocą przycisku „Dodaj multimedia”:
Po kliknięciu przycisku „Wstaw do posta” dane są pobierane z modułu Media w celu wygenerowania kodu HTML: <img>
znacznik z poprawnym źródłem w zależności od wybranego rozmiaru, tytuł jako tekst alternatywny i podpis, jeśli taki istnieje. Ten kod jest wstawiany we właściwym miejscu w edytorze TinyMCE (sprawdź go za pomocą zakładki „Tekst”)
W zakładce „Wizualny” tworzony jest „widok” reprezentujący obraz w edytorze wizualnym. Ten widok wyświetla obraz i dwa przyciski: edytuj i usuń. Ten widok umożliwia zmianę rozmiaru obrazu i zmianę niektórych innych parametrów wizualnie, bez dotykania kodu HTML.
Jeśli więc chcesz dodać jakieś niestandardowe dane (nie nazywaj tego niestandardowym polem, ponieważ nie jest ono dołączone do żadnego postu załącznika), będziesz musiał wstawić go do tego kodu HTML, a następnie zmodyfikować widok, aby umożliwić wizualną zmianę tych danych . Jeśli dobrze rozumiem twoje pytanie, chcesz dodać dane, które pozycjonują obraz w określony sposób na stronie. Możesz do tego użyć niestandardowej klasy.
Oto kod HTML, który został wygenerowany:
<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" />
I chcesz mieć „responsywny” wybór na liście rozwijanej rozmiaru, który sprawi, że kod będzie wyglądał następująco:
<img class="alignnone size-responsive wp-image-10" src="http://myserver.com/wp-content/uploads/2014/08/opensource-300x259.gif" alt="opensource" />
Oto jak to osiągnąć: utwórz wtyczkę, która będzie kolejkować nowy skrypt na stronie edycji postów.
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' ));
}
}
Następnie plik customView.js powinien wyglądać następująco:
(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, _));
A oto wynik: