PluginProbe ʕ •ᴥ•ʔ
Advanced Custom Fields (ACF®) / 6.8.9
Advanced Custom Fields (ACF®) v6.8.9
6.8.9 6.8.8 6.8.7 6.8.6 6.8.5 6.8.4 6.8.3 6.8.2 6.8.1 5.8.5 5.8.6 5.8.7 5.8.8 5.8.9 5.9.0 5.9.1 5.9.2 5.9.3 5.9.4 5.9.5 5.9.6 5.9.7 5.9.8 5.9.9 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.0.6 6.0.7 6.1.0 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 6.1.8 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.6.1 6.2.7 6.2.8 6.2.9 6.3.0 6.3.1 6.3.10.2 6.3.11 6.3.12 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.6.1 6.4.0 6.4.0.1 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.6.0 6.6.1 6.6.2 6.7.0 6.7.1 6.7.2 6.8.0 trunk 1.0.0 1.0.2 1.0.3 1.0.5 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.1.1 2.1.3 2.1.4 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.6 3.0.7 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.8 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 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.10 4.4.11 4.4.12 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 5.10 5.10.1 5.10.2 5.11 5.11.1 5.11.2 5.11.3 5.11.4 5.12 5.12.1 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.6.10 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.10 5.7.12 5.7.13 5.7.2 5.7.3 5.7.4 5.7.5 5.7.6 5.7.7 5.7.8 5.7.9 5.8.0 5.8.1 5.8.10 5.8.11 5.8.12 5.8.13 5.8.14 5.8.2 5.8.3 5.8.4
advanced-custom-fields / includes / fields / class-acf-field-time_picker.php
advanced-custom-fields / includes / fields Last commit date
class-acf-field-accordion.php 5 months ago class-acf-field-button-group.php 5 months ago class-acf-field-checkbox.php 2 months ago class-acf-field-color_picker.php 5 months ago class-acf-field-date_picker.php 5 months ago class-acf-field-date_time_picker.php 5 months ago class-acf-field-email.php 5 months ago class-acf-field-file.php 5 months ago class-acf-field-google-map.php 5 months ago class-acf-field-group.php 5 months ago class-acf-field-icon_picker.php 6 months ago class-acf-field-image.php 1 month ago class-acf-field-link.php 5 months ago class-acf-field-message.php 6 months ago class-acf-field-number.php 5 months ago class-acf-field-oembed.php 2 months ago class-acf-field-output.php 6 months ago class-acf-field-page_link.php 1 month ago class-acf-field-password.php 5 months ago class-acf-field-post_object.php 1 month ago class-acf-field-radio.php 2 months ago class-acf-field-range.php 5 months ago class-acf-field-relationship.php 1 month ago class-acf-field-select.php 2 months ago class-acf-field-separator.php 6 months ago class-acf-field-tab.php 6 months ago class-acf-field-taxonomy.php 2 months ago class-acf-field-text.php 5 months ago class-acf-field-textarea.php 5 months ago class-acf-field-time_picker.php 5 months ago class-acf-field-true_false.php 5 months ago class-acf-field-url.php 5 months ago class-acf-field-user.php 2 months ago class-acf-field-wysiwyg.php 5 months ago class-acf-field.php 5 months ago index.php 2 years ago
class-acf-field-time_picker.php
237 lines
1 <?php
2 /**
3 * @package ACF
4 * @author WP Engine
5 *
6 * © 2026 Advanced Custom Fields (ACF®). All rights reserved.
7 * "ACF" is a trademark of WP Engine.
8 * Licensed under the GNU General Public License v2 or later.
9 * https://www.gnu.org/licenses/gpl-2.0.html
10 */
11
12 if ( ! class_exists( 'acf_field_time_picker' ) ) :
13
14 class acf_field_time_picker extends acf_field {
15
16
17 /**
18 * This function will setup the field type data
19 *
20 * @type function
21 * @date 5/03/2014
22 * @since 5.0.0
23 *
24 * @param n/a
25 * @return n/a
26 */
27 function initialize() {
28
29 // vars
30 $this->name = 'time_picker';
31 $this->label = __( 'Time Picker', 'acf' );
32 $this->category = 'advanced';
33 $this->description = __( 'An interactive UI for picking a time. The time format can be customized using the field settings.', 'acf' );
34 $this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-time.png';
35 $this->doc_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/time-picker/', 'docs', 'field-type-selection' );
36 $this->defaults = array(
37 'display_format' => 'g:i a',
38 'return_format' => 'g:i a',
39 );
40 }
41
42
43 /**
44 * Create the HTML interface for your field
45 *
46 * @param $field - an array holding all the field's data
47 *
48 * @type action
49 * @since 3.6
50 * @date 23/01/13
51 */
52 function render_field( $field ) {
53
54 // Set value.
55 $display_value = '';
56
57 if ( $field['value'] ) {
58 $display_value = acf_format_date( $field['value'], $field['display_format'] );
59 }
60
61 // Elements.
62 $div = array(
63 'class' => 'acf-time-picker acf-input-wrap',
64 'data-time_format' => acf_convert_time_to_js( $field['display_format'] ),
65 );
66 $hidden_input = array(
67 'id' => $field['id'],
68 'class' => 'input-alt',
69 'type' => 'hidden',
70 'name' => $field['name'],
71 'value' => $field['value'],
72 );
73 $text_input = array(
74 'class' => $field['class'] . ' input',
75 'type' => 'text',
76 'value' => $display_value,
77 );
78 foreach ( array( 'readonly', 'disabled' ) as $k ) {
79 if ( ! empty( $field[ $k ] ) ) {
80 $hidden_input[ $k ] = $k;
81 $text_input[ $k ] = $k;
82 }
83 }
84
85 // Output.
86 ?>
87 <div <?php echo acf_esc_attrs( $div ); ?>>
88 <?php acf_hidden_input( $hidden_input ); ?>
89 <?php acf_text_input( $text_input ); ?>
90 </div>
91 <?php
92 }
93
94
95 /**
96 * Create extra options for your field. This is rendered when editing a field.
97 * The value of $field['name'] can be used (like bellow) to save extra data to the $field
98 *
99 * @type action
100 * @since 3.6
101 * @date 23/01/13
102 *
103 * @param $field - an array holding all the field's data
104 */
105 function render_field_settings( $field ) {
106 $g_i_a = date_i18n( 'g:i a' );
107 $H_i_s = date_i18n( 'H:i:s' );
108
109 echo '<div class="acf-field-settings-split">';
110
111 acf_render_field_setting(
112 $field,
113 array(
114 'label' => __( 'Display Format', 'acf' ),
115 'hint' => __( 'The format displayed when editing a post', 'acf' ),
116 'type' => 'radio',
117 'name' => 'display_format',
118 'other_choice' => 1,
119 'choices' => array(
120 'g:i a' => '<span>' . $g_i_a . '</span><code>g:i a</code>',
121 'H:i:s' => '<span>' . $H_i_s . '</span><code>H:i:s</code>',
122 'other' => '<span>' . __( 'Custom:', 'acf' ) . '</span>',
123 ),
124 )
125 );
126
127 acf_render_field_setting(
128 $field,
129 array(
130 'label' => __( 'Return Format', 'acf' ),
131 'hint' => __( 'The format returned via template functions', 'acf' ),
132 'type' => 'radio',
133 'name' => 'return_format',
134 'other_choice' => 1,
135 'choices' => array(
136 'g:i a' => '<span>' . $g_i_a . '</span><code>g:i a</code>',
137 'H:i:s' => '<span>' . $H_i_s . '</span><code>H:i:s</code>',
138 'other' => '<span>' . __( 'Custom:', 'acf' ) . '</span>',
139 ),
140 )
141 );
142
143 echo '</div>';
144 }
145
146 /**
147 * This filter is appied to the $value after it is loaded from the db and before it is returned to the template
148 *
149 * @type filter
150 * @since 3.6
151 * @date 23/01/13
152 *
153 * @param $value (mixed) the value which was loaded from the database
154 * @param $post_id (mixed) the post_id from which the value was loaded
155 * @param $field (array) the field array holding all the field options
156 * @return $value (mixed) the modified value
157 */
158 public function format_value( $value, $post_id, $field ) {
159 return acf_format_date( $value, $field['return_format'] );
160 }
161
162 /**
163 * This filter is applied to the $field after it is loaded from the database
164 * and ensures the return and display values are set.
165 *
166 * @type filter
167 * @since 5.11.0
168 *
169 * @param array $field The field array holding all the field options.
170 * @return array
171 */
172 public function load_field( $field ) {
173 if ( empty( $field['display_format'] ) ) {
174 $field['display_format'] = $this->defaults['display_format'];
175 }
176
177 if ( empty( $field['return_format'] ) ) {
178 $field['return_format'] = $this->defaults['return_format'];
179 }
180
181 return $field;
182 }
183
184 /**
185 * Return the schema array for the REST API.
186 *
187 * @param array $field The field array.
188 * @return array
189 */
190 public function get_rest_schema( array $field ) {
191 return array(
192 'type' => array( 'string', 'null' ),
193 'description' => 'A `H:i:s` formatted time string.',
194 'required' => ! empty( $field['required'] ),
195 );
196 }
197
198 /**
199 * Returns an array of JSON-LD Property output types that are supported by this field type.
200 *
201 * @since 6.8
202 *
203 * @return string[]
204 */
205 public function get_jsonld_output_types(): array {
206 return array( 'Time' );
207 }
208
209 /**
210 * Formats the field value for JSON-LD output.
211 *
212 * Returns the stored H:i:s format which is already ISO 8601 compliant.
213 *
214 * @since 6.8.0
215 *
216 * @param mixed $value The value of the field.
217 * @param integer|string $post_id The ID of the post.
218 * @param array $field The field array.
219 * @return string|null ISO 8601 formatted time or null.
220 */
221 public function format_value_for_jsonld( $value, $post_id, $field ) {
222 if ( empty( $value ) || ! is_string( $value ) ) {
223 return null;
224 }
225
226 // ACF stores time_picker internally as 'H:i:s' which is ISO 8601 compliant.
227 return $value;
228 }
229 }
230
231
232 // initialize
233 acf_register_field_type( 'acf_field_time_picker' );
234 endif; // class_exists check
235
236 ?>
237