1+ <?php
2+ if ( isset ( $ data ['name ' ], $ _POST [ $ data ['name ' ] ] ) ) {
3+ update_option ( $ data ['name ' ], sanitize_text_field ( $ _POST [ $ data ['name ' ] ] ) );
4+ }
5+ wp_enqueue_media ();
6+ $ is_multiple = isset ( $ data ['multiple ' ] ) && $ data ['multiple ' ] === true ? 'true ' : 'false ' ;
7+ $ image_preview_template = '<img src="%s" title="%s" class="media-preview-image"> ' ;
8+
9+ ?>
10+ <div class="plugin-name-media-input-container">
11+ <input
12+ type="hidden"
13+ name="<?php echo esc_attr ( $ data ['name ' ] ?? '' ); ?> "
14+ id="<?php echo esc_attr ( $ data ['name ' ] ?? '' ); ?> "
15+ value="<?php echo esc_attr ( get_option ( $ data ['name ' ] ) ); ?> "
16+ >
17+ <div id="<?php echo esc_attr ( $ data ['name ' ] ?? '' ); ?> _medias-selected" class="plugin-name-medias-selected-container">
18+ <?php
19+ $ medias = explode ( ', ' , get_option ( $ data ['name ' ] ) );
20+ foreach ( $ medias as $ media_id ) {
21+ $ media = get_post ( $ media_id );
22+ if ( $ media ) {
23+ if ( wp_attachment_is_image ( $ media_id ) ) {
24+ echo sprintf ( $ image_preview_template , wp_get_attachment_image_url ( $ media_id , 'thumbnail ' ), $ media ->post_title );
25+ } else {
26+ echo sprintf ( $ image_preview_template , wp_mime_type_icon ( $ media ->post_mime_type ), $ media ->post_title );
27+ }
28+ }
29+ }
30+ ?>
31+ </div>
32+ <input type="button"
33+ name="<?php echo esc_attr ( $ data ['name ' ] ?? '' ); ?> _button"
34+ id="<?php echo esc_attr ( $ data ['name ' ] ?? '' ); ?> _button"
35+ class="button button-secondary"
36+ value="<?php echo esc_attr ( $ data ['button_text ' ] ?? __ ( 'Select media ' , PLUGIN_NAME_TEXT_DOMAIN ) ); ?> "
37+ >
38+ </div>
39+
40+ <script type="text/javascript">
41+ jQuery(document).ready(function($){
42+ const id = '<?php echo esc_attr ( $ data ['name ' ] ?? '' ); ?> ';
43+ const media_template_preview = '<?php echo $ image_preview_template ; ?> ';
44+ jQuery( "#" + id + "_button" ).click(function(e) {
45+ e.preventDefault();
46+ var image = wp.media({
47+ title: '<?php echo esc_attr ( $ data ['button_text ' ] ?? __ ( 'Select media ' , PLUGIN_NAME_TEXT_DOMAIN ) ); ?> ',
48+ multiple: <?php echo esc_attr ( $ is_multiple ); ?>
49+ })
50+
51+ image.on('select', function(e){
52+ console.log(image.state().get('selection').toJSON());
53+ const medias = image.state().get('selection').toJSON();
54+ let selected_medias_preview = '';
55+ let medias_ids = '';
56+ medias.forEach( media => {
57+ medias_ids = medias_ids === '' ? media.id : medias_ids + ',' + media.id;
58+ console.log(medias_ids);
59+ let preview_image = '';
60+ if( media.type === 'image' ) {
61+ preview_image = media.sizes.thumbnail.url;
62+ } else {
63+ preview_image = media.icon;
64+ }
65+ selected_medias_preview += media_template_preview.replace( '%s', preview_image ).replace( '%s', media.title );
66+ });
67+ jQuery( "#" + id + "_medias-selected" ).html( selected_medias_preview );
68+ jQuery( "#" + id ).val( medias_ids );
69+ });
70+
71+ image.on('open', function(e){
72+ console.log(id);
73+ const medias_ids = jQuery( "#" + id ).val();
74+ console.log(medias_ids);
75+ if( medias_ids !== '' ) {
76+ const medias = medias_ids.split(',');
77+ const selection = image.state().get('selection');
78+ medias.forEach( media_id => {
79+ const media = wp.media.attachment( media_id );
80+ media.fetch();
81+ selection.add( media ? [ media ] : [] );
82+ });
83+ }
84+ });
85+
86+ image.open();
87+
88+ });
89+ });
90+ </script>
0 commit comments