PluginProbe ʕ •ᴥ•ʔ
Meta Box / 5.7.5
Meta Box v5.7.5
trunk 4.1.10 4.1.11 4.10 4.10.1 4.10.2 4.10.3 4.10.4 4.11 4.11.1 4.11.2 4.12.1 4.12.4 4.12.5 4.12.6 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.10 4.14.11 4.14.2 4.14.4 4.14.5 4.14.6 4.14.7 4.14.8 4.14.9 4.15.0 4.15.1 4.15.2 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.2 4.16.3 4.17.0 4.17.1 4.17.2 4.17.3 4.18.0 4.18.1 4.18.2 4.18.3 4.18.4 4.2 4.2.1 4.2.2 4.2.3 4.2.4 4.3 4.3.1 4.3.10 4.3.11 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.8 4.3.9 4.4.0 4.4.1 4.4.3 4.5 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.6 4.7 4.7.1 4.7.2 4.7.3 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 4.9.8 5.0.0 5.0.1 5.1.0 5.1.1 5.1.2 5.10.0 5.10.1 5.10.10 5.10.11 5.10.12 5.10.13 5.10.14 5.10.15 5.10.16 5.10.17 5.10.18 5.10.19 5.10.2 5.10.3 5.10.4 5.10.5 5.10.6 5.10.7 5.10.8 5.10.9 5.11.0 5.11.1 5.11.2 5.11.3 5.11.4 5.12.0 5.2.0 5.2.1 5.2.10 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.10 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 5.3.9 5.4.0 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5 5.4.6 5.4.7 5.4.8 5.5.0 5.5.1 5.6.0 5.6.1 5.6.10 5.6.11 5.6.12 5.6.13 5.6.14 5.6.15 5.6.16 5.6.17 5.6.18 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 5.6.7 5.6.8 5.6.9 5.7.0 5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.8.0 5.8.1 5.8.2 5.9.0 5.9.1 5.9.10 5.9.11 5.9.2 5.9.3 5.9.4 5.9.5 5.9.6 5.9.7 5.9.8 5.9.9
meta-box / inc / media-modal.php
meta-box / inc Last commit date
about 2 years ago fields 2 years ago helpers 2 years ago interfaces 3 years ago storages 2 years ago templates 2 years ago walkers 2 years ago autoloader.php 2 years ago clone.php 3 years ago core.php 3 years ago field-registry.php 3 years ago field.php 3 years ago functions.php 3 years ago loader.php 2 years ago media-modal.php 3 years ago meta-box-registry.php 3 years ago meta-box.php 3 years ago request.php 3 years ago sanitizer.php 2 years ago shortcode.php 3 years ago storage-registry.php 3 years ago validation.php 2 years ago wpml.php 2 years ago
media-modal.php
111 lines
1 <?php
2 /**
3 * Add support for editing attachment custom fields in the media modal.
4 */
5 class RWMB_Media_Modal {
6 /**
7 * List of custom fields.
8 *
9 * @var array
10 */
11 protected $fields = [];
12
13 public function init() {
14 // Meta boxes are registered at priority 20, so we use 30 to capture them all.
15 add_action( 'init', [ $this, 'get_fields' ], 30 );
16
17 add_filter( 'attachment_fields_to_edit', [ $this, 'add_fields' ], 11, 2 );
18 add_filter( 'attachment_fields_to_save', [ $this, 'save_fields' ], 11, 2 );
19 }
20
21 public function get_fields() {
22 $meta_boxes = rwmb_get_registry( 'meta_box' )->all();
23 foreach ( $meta_boxes as $meta_box ) {
24 if ( $this->is_in_modal( $meta_box->meta_box ) ) {
25 $this->fields = array_merge( $this->fields, array_values( $meta_box->fields ) );
26 }
27 }
28 }
29
30 /**
31 * Add fields to the attachment edit popup.
32 *
33 * @param array $form_fields An array of attachment form fields.
34 * @param WP_Post $post The WP_Post attachment object.
35 *
36 * @return mixed
37 */
38 public function add_fields( $form_fields, WP_Post $post ) {
39 if ( $this->is_attachment_edit_screen() ) {
40 return $form_fields;
41 }
42
43 foreach ( $this->fields as $field ) {
44 $form_field = $field;
45 $form_field['label'] = $field['name'];
46 $form_field['input'] = 'html';
47
48 // Just ignore the field 'std' because there's no way to check it.
49 $meta = RWMB_Field::call( $field, 'meta', $post->ID, true );
50 $form_field['value'] = $meta;
51
52 $field['field_name'] = 'attachments[' . $post->ID . '][' . $field['field_name'] . ']';
53
54 ob_start();
55 $field['name'] = ''; // Don't show field label as it's already handled by WordPress.
56
57 RWMB_Field::call( 'show', $field, true, $post->ID );
58
59 // For MB Custom Table to flush data from the cache to the database.
60 do_action( 'rwmb_flush_data', $post->ID, $field, [] );
61
62 $form_field['html'] = ob_get_clean();
63
64 $form_fields[ $field['id'] ] = $form_field;
65 }
66
67 return $form_fields;
68 }
69
70 /**
71 * Save custom fields.
72 *
73 * @param array $post An array of post data.
74 * @param array $attachment An array of attachment metadata.
75 *
76 * @return array
77 */
78 public function save_fields( $post, $attachment ) {
79 foreach ( $this->fields as $field ) {
80 $key = $field['id'];
81
82 $old = RWMB_Field::call( $field, 'raw_meta', $post['ID'] );
83 $new = isset( $attachment[ $key ] ) ? $attachment[ $key ] : '';
84
85 $new = RWMB_Field::process_value( $new, $post['ID'], $field );
86
87 // Call defined method to save meta value, if there's no methods, call common one.
88 RWMB_Field::call( $field, 'save', $new, $old, $post['ID'] );
89
90 // For MB Custom Table to flush data from the cache to the database.
91 do_action( 'rwmb_flush_data', $post['ID'], $field, [] );
92 }
93
94 return $post;
95 }
96
97 private function is_in_modal( array $meta_box ): bool {
98 return in_array( 'attachment', $meta_box['post_types'], true ) && ! empty( $meta_box['media_modal'] );
99 }
100
101 private function is_attachment_edit_screen(): bool {
102 if ( ! function_exists( 'get_current_screen' ) ) {
103 return false;
104 }
105
106 $screen = get_current_screen();
107
108 return $screen && $screen->id === 'attachment';
109 }
110 }
111