run:R W Run
7.85 KB
2026-03-11 16:18:51
R W Run
3.54 KB
2026-03-11 16:18:51
R W Run
148.33 KB
2026-03-11 16:18:51
R W Run
11.45 KB
2026-03-11 16:18:51
R W Run
3.58 KB
2026-03-11 16:18:51
R W Run
2.53 KB
2026-03-11 16:18:51
R W Run
2.6 KB
2026-03-11 16:18:51
R W Run
6.59 KB
2026-03-11 16:18:51
R W Run
14.83 KB
2026-03-11 16:18:51
R W Run
21.18 KB
2026-03-11 16:18:51
R W Run
48.13 KB
2026-03-11 16:18:51
R W Run
4.07 KB
2026-03-11 16:18:51
R W Run
5.3 KB
2026-03-11 16:18:51
R W Run
8.28 KB
2026-03-11 16:18:51
R W Run
26.73 KB
2026-03-11 16:18:51
R W Run
2.8 KB
2026-03-11 16:18:51
R W Run
15.2 KB
2026-03-11 16:18:51
R W Run
192.08 KB
2026-03-11 16:18:51
R W Run
11.77 KB
2026-03-11 16:18:51
R W Run
3.2 KB
2026-03-11 16:18:51
R W Run
22.89 KB
2026-03-11 16:18:51
R W Run
12.77 KB
2026-03-11 16:18:51
R W Run
4.08 KB
2026-03-11 16:18:51
R W Run
26.27 KB
2026-03-11 16:18:51
R W Run
4.97 KB
2026-03-11 16:18:51
R W Run
5.57 KB
2026-03-11 16:18:51
R W Run
13.93 KB
2026-03-11 16:18:51
R W Run
4.09 KB
2026-03-11 16:18:51
R W Run
6.79 KB
2026-03-11 16:18:51
R W Run
60.45 KB
2026-03-11 16:18:51
R W Run
32.4 KB
2026-03-11 16:18:51
R W Run
18.24 KB
2026-03-11 16:18:51
R W Run
66.01 KB
2026-03-11 16:18:51
R W Run
23.84 KB
2026-03-11 16:18:51
R W Run
17.72 KB
2026-03-11 16:18:51
R W Run
22.71 KB
2026-03-11 16:18:51
R W Run
18.05 KB
2026-03-11 16:18:51
R W Run
22.76 KB
2026-03-11 16:18:51
R W Run
7.34 KB
2026-03-11 16:18:51
R W Run
4.51 KB
2026-03-11 16:18:51
R W Run
9.02 KB
2026-03-11 16:18:51
R W Run
1.46 KB
2026-03-11 16:18:51
R W Run
51.76 KB
2026-03-11 16:18:51
R W Run
25.29 KB
2026-03-11 16:18:51
R W Run
21.61 KB
2026-03-11 16:18:51
R W Run
27.77 KB
2026-03-11 16:18:51
R W Run
15.35 KB
2026-03-11 16:18:51
R W Run
24.54 KB
2026-03-11 16:18:51
R W Run
56.44 KB
2026-03-11 16:18:51
R W Run
1.42 KB
2026-03-11 16:18:51
R W Run
63.66 KB
2026-03-11 16:18:51
R W Run
31.9 KB
2026-03-11 16:18:51
R W Run
14.44 KB
2026-03-11 16:18:51
R W Run
36.47 KB
2026-03-11 16:18:51
R W Run
14 KB
2026-03-11 16:18:51
R W Run
121.89 KB
2026-03-11 16:18:51
R W Run
6.26 KB
2026-03-11 16:18:51
R W Run
20.73 KB
2026-03-11 16:18:51
R W Run
15.23 KB
2026-03-11 16:18:51
R W Run
10.14 KB
2026-03-11 16:18:51
R W Run
6.94 KB
2026-03-11 16:18:51
R W Run
1.44 KB
2026-03-11 16:18:51
R W Run
46.85 KB
2026-03-11 16:18:51
R W Run
18.61 KB
2026-03-11 16:18:51
R W Run
6.08 KB
2026-03-11 16:18:51
R W Run
20.06 KB
2026-03-11 16:18:51
R W Run
5.73 KB
2026-03-11 16:18:51
R W Run
68.18 KB
2026-03-11 16:18:51
R W Run
40.8 KB
2026-03-11 16:18:51
R W Run
1.44 KB
2026-03-11 16:18:51
R W Run
25.26 KB
2026-03-11 16:18:51
R W Run
95.94 KB
2026-03-11 16:18:51
R W Run
43.12 KB
2026-03-11 16:18:51
R W Run
41.73 KB
2026-03-11 16:18:51
R W Run
6.46 KB
2026-03-11 16:18:51
R W Run
3.71 KB
2026-03-11 16:18:51
R W Run
116.31 KB
2026-03-11 16:18:51
R W Run
9.39 KB
2026-03-11 16:18:51
R W Run
64.34 KB
2026-03-11 16:18:51
R W Run
44.73 KB
2026-03-11 16:18:51
R W Run
1.27 KB
2026-03-11 16:18:51
R W Run
3.68 KB
2026-03-11 16:18:51
R W Run
33.53 KB
2026-03-11 16:18:51
R W Run
48.84 KB
2026-03-11 16:18:51
R W Run
26.35 KB
2026-03-11 16:18:51
R W Run
1.12 KB
2026-03-11 16:18:51
R W Run
4.19 KB
2026-03-11 16:18:51
R W Run
38.19 KB
2026-03-11 16:18:51
R W Run
91.33 KB
2026-03-11 16:18:51
R W Run
80.39 KB
2026-03-11 16:18:51
R W Run
32.67 KB
2026-03-11 16:18:51
R W Run
16.18 KB
2026-03-11 16:18:51
R W Run
44.46 KB
2026-03-11 16:18:51
R W Run
6.23 KB
2026-03-11 16:18:51
R W Run
8.23 KB
2026-03-11 16:18:51
R W Run
96.96 KB
2026-03-11 16:18:51
R W Run
6.83 KB
2026-03-11 16:18:51
R W Run
46.62 KB
2026-03-11 16:18:51
R W Run
10.82 KB
2026-03-11 16:18:51
R W Run
68.86 KB
2026-03-11 16:18:51
R W Run
33.63 KB
2026-03-11 16:18:51
R W Run
113.3 KB
2026-03-11 16:18:51
R W Run
22.98 KB
2026-03-11 16:18:51
R W Run
10.66 KB
2026-03-11 16:18:51
R W Run
error_log
📄meta-boxes.php
1<?php
2/**
3 * WordPress Administration Meta Boxes API.
4 *
5 * @package WordPress
6 * @subpackage Administration
7 */
8
9//
10// Post-related Meta Boxes.
11//
12
13/**
14 * Displays post submit form fields.
15 *
16 * @since 2.7.0
17 *
18 * @global string $action
19 *
20 * @param WP_Post $post Current post object.
21 * @param array $args {
22 * Array of arguments for building the post submit meta box.
23 *
24 * @type string $id Meta box 'id' attribute.
25 * @type string $title Meta box title.
26 * @type callable $callback Meta box display callback.
27 * @type array $args Extra meta box arguments.
28 * }
29 */
30function post_submit_meta_box( $post, $args = array() ) {
31 global $action;
32
33 $post_id = (int) $post->ID;
34 $post_type = $post->post_type;
35 $post_type_object = get_post_type_object( $post_type );
36 $can_publish = current_user_can( $post_type_object->cap->publish_posts );
37 ?>
38<div class="submitbox" id="submitpost">
39
40<div id="minor-publishing">
41
42 <?php // Hidden submit button early on so that the browser chooses the right button when form is submitted with Return key. ?>
43 <div style="display:none;">
44 <?php submit_button( __( 'Save' ), '', 'save' ); ?>
45 </div>
46
47 <div id="minor-publishing-actions">
48 <div id="save-action">
49 <?php
50 if ( ! in_array( $post->post_status, array( 'publish', 'future', 'pending' ), true ) ) {
51 $private_style = '';
52 if ( 'private' === $post->post_status ) {
53 $private_style = 'style="display:none"';
54 }
55 ?>
56 <input <?php echo $private_style; ?> type="submit" name="save" id="save-post" value="<?php esc_attr_e( 'Save Draft' ); ?>" class="button" />
57 <span class="spinner"></span>
58 <?php } elseif ( 'pending' === $post->post_status && $can_publish ) { ?>
59 <input type="submit" name="save" id="save-post" value="<?php esc_attr_e( 'Save as Pending' ); ?>" class="button" />
60 <span class="spinner"></span>
61 <?php } ?>
62 </div>
63
64 <?php
65 if ( is_post_type_viewable( $post_type_object ) ) :
66 ?>
67 <div id="preview-action">
68 <?php
69 $preview_link = esc_url( get_preview_post_link( $post ) );
70 if ( 'publish' === $post->post_status ) {
71 $preview_button_text = __( 'Preview Changes' );
72 } else {
73 $preview_button_text = __( 'Preview' );
74 }
75
76 $preview_button = sprintf(
77 '%1$s<span class="screen-reader-text"> %2$s</span>',
78 $preview_button_text,
79 /* translators: Hidden accessibility text. */
80 __( '(opens in a new tab)' )
81 );
82 ?>
83 <a class="preview button" href="<?php echo $preview_link; ?>" target="wp-preview-<?php echo $post_id; ?>" id="post-preview"><?php echo $preview_button; ?></a>
84 <input type="hidden" name="wp-preview" id="wp-preview" value="" />
85 </div>
86 <?php
87 endif;
88
89 /**
90 * Fires after the Save Draft (or Save as Pending) and Preview (or Preview Changes) buttons
91 * in the Publish meta box.
92 *
93 * @since 4.4.0
94 *
95 * @param WP_Post $post WP_Post object for the current post.
96 */
97 do_action( 'post_submitbox_minor_actions', $post );
98 ?>
99 <div class="clear"></div>
100 </div>
101
102 <div id="misc-publishing-actions">
103 <div class="misc-pub-section misc-pub-post-status">
104 <?php _e( 'Status:' ); ?>
105 <span id="post-status-display">
106 <?php
107 switch ( $post->post_status ) {
108 case 'private':
109 _e( 'Privately Published' );
110 break;
111 case 'publish':
112 _e( 'Published' );
113 break;
114 case 'future':
115 _e( 'Scheduled' );
116 break;
117 case 'pending':
118 _e( 'Pending Review' );
119 break;
120 case 'draft':
121 case 'auto-draft':
122 _e( 'Draft' );
123 break;
124 }
125 ?>
126 </span>
127
128 <?php
129 if ( 'publish' === $post->post_status || 'private' === $post->post_status || $can_publish ) {
130 $private_style = '';
131 if ( 'private' === $post->post_status ) {
132 $private_style = 'style="display:none"';
133 }
134 ?>
135 <a href="#post_status" <?php echo $private_style; ?> class="edit-post-status hide-if-no-js" role="button"><span aria-hidden="true"><?php _e( 'Edit' ); ?></span> <span class="screen-reader-text">
136 <?php
137 /* translators: Hidden accessibility text. */
138 _e( 'Edit status' );
139 ?>
140 </span></a>
141
142 <div id="post-status-select" class="hide-if-js">
143 <input type="hidden" name="hidden_post_status" id="hidden_post_status" value="<?php echo esc_attr( ( 'auto-draft' === $post->post_status ) ? 'draft' : $post->post_status ); ?>" />
144 <label for="post_status" class="screen-reader-text">
145 <?php
146 /* translators: Hidden accessibility text. */
147 _e( 'Set status' );
148 ?>
149 </label>
150 <select name="post_status" id="post_status">
151 <?php if ( 'publish' === $post->post_status ) : ?>
152 <option<?php selected( $post->post_status, 'publish' ); ?> value='publish'><?php _e( 'Published' ); ?></option>
153 <?php elseif ( 'private' === $post->post_status ) : ?>
154 <option<?php selected( $post->post_status, 'private' ); ?> value='publish'><?php _e( 'Privately Published' ); ?></option>
155 <?php elseif ( 'future' === $post->post_status ) : ?>
156 <option<?php selected( $post->post_status, 'future' ); ?> value='future'><?php _e( 'Scheduled' ); ?></option>
157 <?php endif; ?>
158 <option<?php selected( $post->post_status, 'pending' ); ?> value='pending'><?php _e( 'Pending Review' ); ?></option>
159 <?php if ( 'auto-draft' === $post->post_status ) : ?>
160 <option<?php selected( $post->post_status, 'auto-draft' ); ?> value='draft'><?php _e( 'Draft' ); ?></option>
161 <?php else : ?>
162 <option<?php selected( $post->post_status, 'draft' ); ?> value='draft'><?php _e( 'Draft' ); ?></option>
163 <?php endif; ?>
164 </select>
165 <a href="#post_status" class="save-post-status hide-if-no-js button"><?php _e( 'OK' ); ?></a>
166 <a href="#post_status" class="cancel-post-status hide-if-no-js button-cancel"><?php _e( 'Cancel' ); ?></a>
167 </div>
168 <?php
169 }
170 ?>
171 </div>
172
173 <div class="misc-pub-section misc-pub-visibility" id="visibility">
174 <?php _e( 'Visibility:' ); ?>
175 <span id="post-visibility-display">
176 <?php
177 if ( 'private' === $post->post_status ) {
178 $post->post_password = '';
179 $visibility = 'private';
180 $visibility_trans = __( 'Private' );
181 } elseif ( ! empty( $post->post_password ) ) {
182 $visibility = 'password';
183 $visibility_trans = __( 'Password protected' );
184 } elseif ( 'post' === $post_type && is_sticky( $post_id ) ) {
185 $visibility = 'public';
186 $visibility_trans = __( 'Public, Sticky' );
187 } else {
188 $visibility = 'public';
189 $visibility_trans = __( 'Public' );
190 }
191
192 echo esc_html( $visibility_trans );
193 ?>
194 </span>
195
196 <?php if ( $can_publish ) { ?>
197 <a href="#visibility" class="edit-visibility hide-if-no-js" role="button"><span aria-hidden="true"><?php _e( 'Edit' ); ?></span> <span class="screen-reader-text">
198 <?php
199 /* translators: Hidden accessibility text. */
200 _e( 'Edit visibility' );
201 ?>
202 </span></a>
203
204 <div id="post-visibility-select" class="hide-if-js">
205 <input type="hidden" name="hidden_post_password" id="hidden-post-password" value="<?php echo esc_attr( $post->post_password ); ?>" />
206 <?php if ( 'post' === $post_type ) : ?>
207 <input type="checkbox" style="display:none" name="hidden_post_sticky" id="hidden-post-sticky" value="sticky" <?php checked( is_sticky( $post_id ) ); ?> />
208 <?php endif; ?>
209
210 <input type="hidden" name="hidden_post_visibility" id="hidden-post-visibility" value="<?php echo esc_attr( $visibility ); ?>" />
211 <input type="radio" name="visibility" id="visibility-radio-public" value="public" <?php checked( $visibility, 'public' ); ?> /> <label for="visibility-radio-public" class="selectit"><?php _e( 'Public' ); ?></label><br />
212
213 <?php if ( 'post' === $post_type && current_user_can( 'edit_others_posts' ) ) : ?>
214 <span id="sticky-span"><input id="sticky" name="sticky" type="checkbox" value="sticky" <?php checked( is_sticky( $post_id ) ); ?> /> <label for="sticky" class="selectit"><?php _e( 'Stick this post to the front page' ); ?></label><br /></span>
215 <?php endif; ?>
216
217 <input type="radio" name="visibility" id="visibility-radio-password" value="password" <?php checked( $visibility, 'password' ); ?> /> <label for="visibility-radio-password" class="selectit"><?php _e( 'Password protected' ); ?></label><br />
218 <span id="password-span"><label for="post_password"><?php _e( 'Password:' ); ?></label> <input type="text" name="post_password" id="post_password" value="<?php echo esc_attr( $post->post_password ); ?>" maxlength="255" /><br /></span>
219
220 <input type="radio" name="visibility" id="visibility-radio-private" value="private" <?php checked( $visibility, 'private' ); ?> /> <label for="visibility-radio-private" class="selectit"><?php _e( 'Private' ); ?></label><br />
221
222 <p>
223 <a href="#visibility" class="save-post-visibility hide-if-no-js button"><?php _e( 'OK' ); ?></a>
224 <a href="#visibility" class="cancel-post-visibility hide-if-no-js button-cancel"><?php _e( 'Cancel' ); ?></a>
225 </p>
226 </div>
227 <?php } ?>
228 </div>
229
230 <?php
231 /* translators: Publish box date string. 1: Date, 2: Time. See https://www.php.net/manual/datetime.format.php */
232 $date_string = __( '%1$s at %2$s' );
233 /* translators: Publish box date format, see https://www.php.net/manual/datetime.format.php */
234 $date_format = _x( 'M j, Y', 'publish box date format' );
235 /* translators: Publish box time format, see https://www.php.net/manual/datetime.format.php */
236 $time_format = _x( 'H:i', 'publish box time format' );
237
238 if ( 0 !== $post_id ) {
239 if ( 'future' === $post->post_status ) { // Scheduled for publishing at a future date.
240 /* translators: Post date information. %s: Date on which the post is currently scheduled to be published. */
241 $stamp = __( 'Scheduled for: %s' );
242 } elseif ( 'publish' === $post->post_status || 'private' === $post->post_status ) { // Already published.
243 /* translators: Post date information. %s: Date on which the post was published. */
244 $stamp = __( 'Published on: %s' );
245 } elseif ( '0000-00-00 00:00:00' === $post->post_date_gmt ) { // Draft, 1 or more saves, no date specified.
246 $stamp = __( 'Publish <b>immediately</b>' );
247 } elseif ( time() < strtotime( $post->post_date_gmt . ' +0000' ) ) { // Draft, 1 or more saves, future date specified.
248 /* translators: Post date information. %s: Date on which the post is to be published. */
249 $stamp = __( 'Schedule for: %s' );
250 } else { // Draft, 1 or more saves, date specified.
251 /* translators: Post date information. %s: Date on which the post is to be published. */
252 $stamp = __( 'Publish on: %s' );
253 }
254 $date = sprintf(
255 $date_string,
256 date_i18n( $date_format, strtotime( $post->post_date ) ),
257 date_i18n( $time_format, strtotime( $post->post_date ) )
258 );
259 } else { // Draft (no saves, and thus no date specified).
260 $stamp = __( 'Publish <b>immediately</b>' );
261 $date = sprintf(
262 $date_string,
263 date_i18n( $date_format, strtotime( current_time( 'mysql' ) ) ),
264 date_i18n( $time_format, strtotime( current_time( 'mysql' ) ) )
265 );
266 }
267
268 if ( ! empty( $args['args']['revisions_count'] ) ) :
269 ?>
270 <div class="misc-pub-section misc-pub-revisions">
271 <?php
272 /* translators: Post revisions heading. %s: The number of available revisions. */
273 printf( __( 'Revisions: %s' ), '<b>' . number_format_i18n( $args['args']['revisions_count'] ) . '</b>' );
274 ?>
275 <a class="hide-if-no-js" href="<?php echo esc_url( get_edit_post_link( $args['args']['revision_id'] ) ); ?>"><span aria-hidden="true"><?php _ex( 'Browse', 'revisions' ); ?></span> <span class="screen-reader-text">
276 <?php
277 /* translators: Hidden accessibility text. */
278 _e( 'Browse revisions' );
279 ?>
280 </span></a>
281 </div>
282 <?php
283 endif;
284
285 if ( $can_publish ) : // Contributors don't get to choose the date of publish.
286 ?>
287 <div class="misc-pub-section curtime misc-pub-curtime">
288 <span id="timestamp">
289 <?php printf( $stamp, '<b>' . $date . '</b>' ); ?>
290 </span>
291 <a href="#edit_timestamp" class="edit-timestamp hide-if-no-js" role="button">
292 <span aria-hidden="true"><?php _e( 'Edit' ); ?></span>
293 <span class="screen-reader-text">
294 <?php
295 /* translators: Hidden accessibility text. */
296 _e( 'Edit date and time' );
297 ?>
298 </span>
299 </a>
300 <fieldset id="timestampdiv" class="hide-if-js">
301 <legend class="screen-reader-text">
302 <?php
303 /* translators: Hidden accessibility text. */
304 _e( 'Date and time' );
305 ?>
306 </legend>
307 <?php touch_time( ( 'edit' === $action ), 1 ); ?>
308 </fieldset>
309 </div>
310 <?php
311 endif;
312
313 if ( 'draft' === $post->post_status && get_post_meta( $post_id, '_customize_changeset_uuid', true ) ) :
314 $message = sprintf(
315 /* translators: %s: URL to the Customizer. */
316 __( 'This draft comes from your <a href="%s">unpublished customization changes</a>. You can edit, but there is no need to publish now. It will be published automatically with those changes.' ),
317 esc_url(
318 add_query_arg(
319 'changeset_uuid',
320 rawurlencode( get_post_meta( $post_id, '_customize_changeset_uuid', true ) ),
321 admin_url( 'customize.php' )
322 )
323 )
324 );
325 wp_admin_notice(
326 $message,
327 array(
328 'type' => 'info',
329 'additional_classes' => array( 'notice-alt', 'inline' ),
330 )
331 );
332 endif;
333
334 /**
335 * Fires after the post time/date setting in the Publish meta box.
336 *
337 * @since 2.9.0
338 * @since 4.4.0 Added the `$post` parameter.
339 *
340 * @param WP_Post $post WP_Post object for the current post.
341 */
342 do_action( 'post_submitbox_misc_actions', $post );
343 ?>
344 </div>
345 <div class="clear"></div>
346</div>
347
348<div id="major-publishing-actions">
349 <?php
350 /**
351 * Fires at the beginning of the publishing actions section of the Publish meta box.
352 *
353 * @since 2.7.0
354 * @since 4.9.0 Added the `$post` parameter.
355 *
356 * @param WP_Post|null $post WP_Post object for the current post on Edit Post screen,
357 * null on Edit Link screen.
358 */
359 do_action( 'post_submitbox_start', $post );
360 ?>
361 <div id="delete-action">
362 <?php
363 if ( current_user_can( 'delete_post', $post_id ) ) {
364 if ( ! EMPTY_TRASH_DAYS ) {
365 $delete_text = __( 'Delete permanently' );
366 } else {
367 $delete_text = __( 'Move to Trash' );
368 }
369 ?>
370 <a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post_id ); ?>"><?php echo $delete_text; ?></a>
371 <?php
372 }
373 ?>
374 </div>
375
376 <div id="publishing-action">
377 <span class="spinner"></span>
378 <?php
379 if ( ! in_array( $post->post_status, array( 'publish', 'future', 'private' ), true ) || 0 === $post_id ) {
380 if ( $can_publish ) :
381 if ( ! empty( $post->post_date_gmt ) && time() < strtotime( $post->post_date_gmt . ' +0000' ) ) :
382 ?>
383 <input name="original_publish" type="hidden" id="original_publish" value="<?php echo esc_attr_x( 'Schedule', 'post action/button label' ); ?>" />
384 <?php submit_button( _x( 'Schedule', 'post action/button label' ), 'primary large', 'publish', false ); ?>
385 <?php
386 else :
387 ?>
388 <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e( 'Publish' ); ?>" />
389 <?php submit_button( __( 'Publish' ), 'primary large', 'publish', false ); ?>
390 <?php
391 endif;
392 else :
393 ?>
394 <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e( 'Submit for Review' ); ?>" />
395 <?php submit_button( __( 'Submit for Review' ), 'primary large', 'publish', false ); ?>
396 <?php
397 endif;
398 } else {
399 ?>
400 <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e( 'Update' ); ?>" />
401 <?php submit_button( __( 'Update' ), 'primary large', 'save', false, array( 'id' => 'publish' ) ); ?>
402 <?php
403 }
404 ?>
405 </div>
406 <div class="clear"></div>
407</div>
408
409</div>
410 <?php
411}
412
413/**
414 * Displays attachment submit form fields.
415 *
416 * @since 3.5.0
417 *
418 * @param WP_Post $post Current post object.
419 */
420function attachment_submit_meta_box( $post ) {
421 ?>
422<div class="submitbox" id="submitpost">
423
424<div id="minor-publishing">
425
426 <?php // Hidden submit button early on so that the browser chooses the right button when form is submitted with Return key. ?>
427<div style="display:none;">
428 <?php submit_button( __( 'Save' ), '', 'save' ); ?>
429</div>
430
431
432<div id="misc-publishing-actions">
433 <div class="misc-pub-section curtime misc-pub-curtime">
434 <span id="timestamp">
435 <?php
436 $uploaded_on = sprintf(
437 /* translators: Publish box date string. 1: Date, 2: Time. */
438 __( '%1$s at %2$s' ),
439 /* translators: Publish box date format, see https://www.php.net/manual/datetime.format.php */
440 date_i18n( _x( 'M j, Y', 'publish box date format' ), strtotime( $post->post_date ) ),
441 /* translators: Publish box time format, see https://www.php.net/manual/datetime.format.php */
442 date_i18n( _x( 'H:i', 'publish box time format' ), strtotime( $post->post_date ) )
443 );
444 /* translators: Attachment information. %s: Date the attachment was uploaded. */
445 printf( __( 'Uploaded on: %s' ), '<b>' . $uploaded_on . '</b>' );
446 ?>
447 </span>
448 </div><!-- .misc-pub-section -->
449
450 <?php
451 /**
452 * Fires after the 'Uploaded on' section of the Save meta box
453 * in the attachment editing screen.
454 *
455 * @since 3.5.0
456 * @since 4.9.0 Added the `$post` parameter.
457 *
458 * @param WP_Post $post WP_Post object for the current attachment.
459 */
460 do_action( 'attachment_submitbox_misc_actions', $post );
461 ?>
462</div><!-- #misc-publishing-actions -->
463<div class="clear"></div>
464</div><!-- #minor-publishing -->
465
466<div id="major-publishing-actions">
467 <div id="delete-action">
468 <?php
469 if ( current_user_can( 'delete_post', $post->ID ) ) {
470 if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
471 printf(
472 '<a class="submitdelete deletion" href="%1$s">%2$s</a>',
473 get_delete_post_link( $post->ID ),
474 __( 'Move to Trash' )
475 );
476 } else {
477 $show_confirmation = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : '';
478
479 printf(
480 '<a class="submitdelete deletion"%1$s href="%2$s">%3$s</a>',
481 $show_confirmation,
482 get_delete_post_link( $post->ID, '', true ),
483 __( 'Delete permanently' )
484 );
485 }
486 }
487 ?>
488 </div>
489
490 <div id="publishing-action">
491 <span class="spinner"></span>
492 <input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e( 'Update' ); ?>" />
493 <input name="save" type="submit" class="button button-primary button-large" id="publish" value="<?php esc_attr_e( 'Update' ); ?>" />
494 </div>
495 <div class="clear"></div>
496</div><!-- #major-publishing-actions -->
497
498</div>
499
500 <?php
501}
502
503/**
504 * Displays post format form elements.
505 *
506 * @since 3.1.0
507 *
508 * @param WP_Post $post Current post object.
509 * @param array $box {
510 * Post formats meta box arguments.
511 *
512 * @type string $id Meta box 'id' attribute.
513 * @type string $title Meta box title.
514 * @type callable $callback Meta box display callback.
515 * @type array $args Extra meta box arguments.
516 * }
517 */
518function post_format_meta_box( $post, $box ) {
519 if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) ) :
520 $post_formats = get_theme_support( 'post-formats' );
521
522 if ( is_array( $post_formats[0] ) ) :
523 $post_format = get_post_format( $post->ID );
524 if ( ! $post_format ) {
525 $post_format = '0';
526 }
527 // Add in the current one if it isn't there yet, in case the active theme doesn't support it.
528 if ( $post_format && ! in_array( $post_format, $post_formats[0], true ) ) {
529 $post_formats[0][] = $post_format;
530 }
531 ?>
532 <div id="post-formats-select">
533 <fieldset>
534 <legend class="screen-reader-text">
535 <?php
536 /* translators: Hidden accessibility text. */
537 _e( 'Post Formats' );
538 ?>
539 </legend>
540 <input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, '0' ); ?> /> <label for="post-format-0" class="post-format-icon post-format-standard"><?php echo get_post_format_string( 'standard' ); ?></label>
541 <?php foreach ( $post_formats[0] as $format ) : ?>
542 <br /><input type="radio" name="post_format" class="post-format" id="post-format-<?php echo esc_attr( $format ); ?>" value="<?php echo esc_attr( $format ); ?>" <?php checked( $post_format, $format ); ?> /> <label for="post-format-<?php echo esc_attr( $format ); ?>" class="post-format-icon post-format-<?php echo esc_attr( $format ); ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label>
543 <?php endforeach; ?>
544 </fieldset>
545 </div>
546 <?php
547 endif;
548endif;
549}
550
551/**
552 * Displays post tags form fields.
553 *
554 * @since 2.6.0
555 *
556 * @todo Create taxonomy-agnostic wrapper for this.
557 *
558 * @param WP_Post $post Current post object.
559 * @param array $box {
560 * Tags meta box arguments.
561 *
562 * @type string $id Meta box 'id' attribute.
563 * @type string $title Meta box title.
564 * @type callable $callback Meta box display callback.
565 * @type array $args {
566 * Extra meta box arguments.
567 *
568 * @type string $taxonomy Taxonomy. Default 'post_tag'.
569 * }
570 * }
571 */
572function post_tags_meta_box( $post, $box ) {
573 $defaults = array( 'taxonomy' => 'post_tag' );
574 if ( ! isset( $box['args'] ) || ! is_array( $box['args'] ) ) {
575 $args = array();
576 } else {
577 $args = $box['args'];
578 }
579 $parsed_args = wp_parse_args( $args, $defaults );
580 $tax_name = esc_attr( $parsed_args['taxonomy'] );
581 $taxonomy = get_taxonomy( $parsed_args['taxonomy'] );
582 $user_can_assign_terms = current_user_can( $taxonomy->cap->assign_terms );
583 $comma = _x( ',', 'tag delimiter' );
584 $terms_to_edit = get_terms_to_edit( $post->ID, $tax_name );
585 if ( ! is_string( $terms_to_edit ) ) {
586 $terms_to_edit = '';
587 }
588 ?>
589<div class="tagsdiv" id="<?php echo $tax_name; ?>">
590 <div class="jaxtag">
591 <div class="nojs-tags hide-if-js">
592 <label for="tax-input-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->add_or_remove_items; ?></label>
593 <p><textarea name="<?php echo "tax_input[$tax_name]"; ?>" rows="3" cols="20" class="the-tags" id="tax-input-<?php echo $tax_name; ?>" <?php disabled( ! $user_can_assign_terms ); ?> aria-describedby="new-tag-<?php echo $tax_name; ?>-desc"><?php echo str_replace( ',', $comma . ' ', $terms_to_edit ); // textarea_escaped by esc_attr() ?></textarea></p>
594 </div>
595 <?php if ( $user_can_assign_terms ) : ?>
596 <div class="ajaxtag hide-if-no-js">
597 <label class="screen-reader-text" for="new-tag-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->add_new_item; ?></label>
598 <input data-wp-taxonomy="<?php echo $tax_name; ?>" type="text" id="new-tag-<?php echo $tax_name; ?>" name="newtag[<?php echo $tax_name; ?>]" class="newtag form-input-tip" size="16" autocomplete="off" aria-describedby="new-tag-<?php echo $tax_name; ?>-desc" value="" />
599 <input type="button" class="button tagadd" value="<?php esc_attr_e( 'Add' ); ?>" />
600 </div>
601 <p class="howto" id="new-tag-<?php echo $tax_name; ?>-desc"><?php echo $taxonomy->labels->separate_items_with_commas; ?></p>
602 <?php elseif ( empty( $terms_to_edit ) ) : ?>
603 <p><?php echo $taxonomy->labels->no_terms; ?></p>
604 <?php endif; ?>
605 </div>
606 <ul class="tagchecklist" role="list"></ul>
607</div>
608 <?php if ( $user_can_assign_terms ) : ?>
609<p class="hide-if-no-js"><button type="button" class="button-link tagcloud-link" id="link-<?php echo $tax_name; ?>" aria-expanded="false"><?php echo $taxonomy->labels->choose_from_most_used; ?></button></p>
610<?php endif; ?>
611 <?php
612}
613
614/**
615 * Displays post categories form fields.
616 *
617 * @since 2.6.0
618 *
619 * @todo Create taxonomy-agnostic wrapper for this.
620 *
621 * @param WP_Post $post Current post object.
622 * @param array $box {
623 * Categories meta box arguments.
624 *
625 * @type string $id Meta box 'id' attribute.
626 * @type string $title Meta box title.
627 * @type callable $callback Meta box display callback.
628 * @type array $args {
629 * Extra meta box arguments.
630 *
631 * @type string $taxonomy Taxonomy. Default 'category'.
632 * }
633 * }
634 */
635function post_categories_meta_box( $post, $box ) {
636 $defaults = array( 'taxonomy' => 'category' );
637 if ( ! isset( $box['args'] ) || ! is_array( $box['args'] ) ) {
638 $args = array();
639 } else {
640 $args = $box['args'];
641 }
642 $parsed_args = wp_parse_args( $args, $defaults );
643 $tax_name = esc_attr( $parsed_args['taxonomy'] );
644 $taxonomy = get_taxonomy( $parsed_args['taxonomy'] );
645 ?>
646 <div id="taxonomy-<?php echo $tax_name; ?>" class="categorydiv">
647 <ul id="<?php echo $tax_name; ?>-tabs" class="category-tabs">
648 <li class="tabs"><a href="#<?php echo $tax_name; ?>-all"><?php echo $taxonomy->labels->all_items; ?></a></li>
649 <li class="hide-if-no-js"><a href="#<?php echo $tax_name; ?>-pop"><?php echo esc_html( $taxonomy->labels->most_used ); ?></a></li>
650 </ul>
651
652 <div id="<?php echo $tax_name; ?>-pop" class="tabs-panel" style="display: none;">
653 <ul id="<?php echo $tax_name; ?>checklist-pop" class="categorychecklist form-no-clear" >
654 <?php $popular_ids = wp_popular_terms_checklist( $tax_name ); ?>
655 </ul>
656 </div>
657
658 <div id="<?php echo $tax_name; ?>-all" class="tabs-panel">
659 <?php
660 $name = ( 'category' === $tax_name ) ? 'post_category' : 'tax_input[' . $tax_name . ']';
661 // Allows for an empty term set to be sent. 0 is an invalid term ID and will be ignored by empty() checks.
662 echo "<input type='hidden' name='{$name}[]' value='0' />";
663 ?>
664 <ul id="<?php echo $tax_name; ?>checklist" data-wp-lists="list:<?php echo $tax_name; ?>" class="categorychecklist form-no-clear">
665 <?php
666 wp_terms_checklist(
667 $post->ID,
668 array(
669 'taxonomy' => $tax_name,
670 'popular_cats' => $popular_ids,
671 )
672 );
673 ?>
674 </ul>
675 </div>
676 <?php if ( current_user_can( $taxonomy->cap->edit_terms ) ) : ?>
677 <div id="<?php echo $tax_name; ?>-adder" class="wp-hidden-children">
678 <a id="<?php echo $tax_name; ?>-add-toggle" href="#<?php echo $tax_name; ?>-add" class="hide-if-no-js taxonomy-add-new">
679 <?php
680 /* translators: %s: Add New taxonomy label. */
681 printf( __( '+ %s' ), $taxonomy->labels->add_new_item );
682 ?>
683 </a>
684 <p id="<?php echo $tax_name; ?>-add" class="category-add wp-hidden-child">
685 <label class="screen-reader-text" for="new<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->add_new_item; ?></label>
686 <input type="text" name="new<?php echo $tax_name; ?>" id="new<?php echo $tax_name; ?>" class="form-required form-input-tip" value="<?php echo esc_attr( $taxonomy->labels->new_item_name ); ?>" aria-required="true" />
687 <label class="screen-reader-text" for="new<?php echo $tax_name; ?>_parent">
688 <?php echo $taxonomy->labels->parent_item_colon; ?>
689 </label>
690 <?php
691 $parent_dropdown_args = array(
692 'taxonomy' => $tax_name,
693 'hide_empty' => 0,
694 'name' => 'new' . $tax_name . '_parent',
695 'orderby' => 'name',
696 'hierarchical' => 1,
697 'show_option_none' => '&mdash; ' . $taxonomy->labels->parent_item . ' &mdash;',
698 );
699
700 /**
701 * Filters the arguments for the taxonomy parent dropdown on the Post Edit page.
702 *
703 * @since 4.4.0
704 *
705 * @param array $parent_dropdown_args {
706 * Optional. Array of arguments to generate parent dropdown.
707 *
708 * @type string $taxonomy Name of the taxonomy to retrieve.
709 * @type bool $hide_if_empty True to skip generating markup if no
710 * categories are found. Default 0.
711 * @type string $name Value for the 'name' attribute
712 * of the select element.
713 * Default "new{$tax_name}_parent".
714 * @type string $orderby Which column to use for ordering
715 * terms. Default 'name'.
716 * @type bool|int $hierarchical Whether to traverse the taxonomy
717 * hierarchy. Default 1.
718 * @type string $show_option_none Text to display for the "none" option.
719 * Default "&mdash; {$parent} &mdash;",
720 * where `$parent` is 'parent_item'
721 * taxonomy label.
722 * }
723 */
724 $parent_dropdown_args = apply_filters( 'post_edit_category_parent_dropdown_args', $parent_dropdown_args );
725
726 wp_dropdown_categories( $parent_dropdown_args );
727 ?>
728 <input type="button" id="<?php echo $tax_name; ?>-add-submit" data-wp-lists="add:<?php echo $tax_name; ?>checklist:<?php echo $tax_name; ?>-add" class="button category-add-submit" value="<?php echo esc_attr( $taxonomy->labels->add_new_item ); ?>" />
729 <?php wp_nonce_field( 'add-' . $tax_name, '_ajax_nonce-add-' . $tax_name, false ); ?>
730 <span id="<?php echo $tax_name; ?>-ajax-response"></span>
731 </p>
732 </div>
733 <?php endif; ?>
734 </div>
735 <?php
736}
737
738/**
739 * Displays post excerpt form fields.
740 *
741 * @since 2.6.0
742 *
743 * @param WP_Post $post Current post object.
744 */
745function post_excerpt_meta_box( $post ) {
746 ?>
747<label class="screen-reader-text" for="excerpt">
748 <?php
749 /* translators: Hidden accessibility text. */
750 _e( 'Excerpt' );
751 ?>
752</label><textarea rows="1" cols="40" name="excerpt" id="excerpt"><?php echo $post->post_excerpt; // textarea_escaped ?></textarea>
753<p>
754 <?php
755 printf(
756 /* translators: %s: Documentation URL. */
757 __( 'Excerpts are optional hand-crafted summaries of your content that can be used in your theme. <a href="%s">Learn more about manual excerpts</a>.' ),
758 __( 'https://wordpress.org/documentation/article/what-is-an-excerpt-classic-editor/' )
759 );
760 ?>
761</p>
762 <?php
763}
764
765/**
766 * Displays trackback links form fields.
767 *
768 * @since 2.6.0
769 *
770 * @param WP_Post $post Current post object.
771 */
772function post_trackback_meta_box( $post ) {
773 $form_trackback = '<input type="text" name="trackback_url" id="trackback_url" class="code" value="' .
774 esc_attr( str_replace( "\n", ' ', $post->to_ping ) ) . '" aria-describedby="trackback-url-desc" />';
775
776 if ( '' !== $post->pinged ) {
777 $pings = '<p>' . __( 'Already pinged:' ) . '</p><ul>';
778 $already_pinged = explode( "\n", trim( $post->pinged ) );
779 foreach ( $already_pinged as $pinged_url ) {
780 $pings .= "\n\t<li>" . esc_html( $pinged_url ) . '</li>';
781 }
782 $pings .= '</ul>';
783 }
784
785 ?>
786<p>
787 <label for="trackback_url"><?php _e( 'Send trackbacks to:' ); ?></label>
788 <?php echo $form_trackback; ?>
789</p>
790<p id="trackback-url-desc" class="howto"><?php _e( 'Separate multiple URLs with spaces' ); ?></p>
791<p>
792 <?php
793 printf(
794 /* translators: %s: Documentation URL. */
795 __( 'Trackbacks are a way to notify legacy blog systems that you&#8217;ve linked to them. If you link other WordPress sites, they&#8217;ll be notified automatically using <a href="%s">pingbacks</a>, no other action necessary.' ),
796 __( 'https://wordpress.org/documentation/article/introduction-to-blogging/#comments' )
797 );
798 ?>
799</p>
800 <?php
801 if ( ! empty( $pings ) ) {
802 echo $pings;
803 }
804}
805
806/**
807 * Displays custom fields form fields.
808 *
809 * @since 2.6.0
810 *
811 * @param WP_Post $post Current post object.
812 */
813function post_custom_meta_box( $post ) {
814 ?>
815<div id="postcustomstuff">
816<div id="ajax-response"></div>
817 <?php
818 $metadata = has_meta( $post->ID );
819 foreach ( $metadata as $key => $value ) {
820 if ( is_protected_meta( $metadata[ $key ]['meta_key'], 'post' ) || ! current_user_can( 'edit_post_meta', $post->ID, $metadata[ $key ]['meta_key'] ) ) {
821 unset( $metadata[ $key ] );
822 }
823 }
824 list_meta( $metadata );
825 meta_form( $post );
826 ?>
827</div>
828<p>
829 <?php
830 printf(
831 /* translators: %s: Documentation URL. */
832 __( 'Custom fields can be used to add extra metadata to a post that you can <a href="%s">use in your theme</a>.' ),
833 __( 'https://wordpress.org/documentation/article/assign-custom-fields/' )
834 );
835 ?>
836</p>
837 <?php
838}
839
840/**
841 * Displays comments status form fields.
842 *
843 * @since 2.6.0
844 *
845 * @param WP_Post $post Current post object.
846 */
847function post_comment_status_meta_box( $post ) {
848 ?>
849<input name="advanced_view" type="hidden" value="1" />
850<p class="meta-options">
851 <label for="comment_status" class="selectit"><input name="comment_status" type="checkbox" id="comment_status" value="open" <?php checked( $post->comment_status, 'open' ); ?> /> <?php _e( 'Allow comments' ); ?></label><br />
852 <label for="ping_status" class="selectit"><input name="ping_status" type="checkbox" id="ping_status" value="open" <?php checked( $post->ping_status, 'open' ); ?> />
853 <?php
854 printf(
855 /* translators: %s: Documentation URL. */
856 __( 'Allow <a href="%s">trackbacks and pingbacks</a>' ),
857 __( 'https://wordpress.org/documentation/article/introduction-to-blogging/#managing-comments' )
858 );
859 ?>
860 </label>
861 <?php
862 /**
863 * Fires at the end of the Discussion meta box on the post editing screen.
864 *
865 * @since 3.1.0
866 *
867 * @param WP_Post $post WP_Post object for the current post.
868 */
869 do_action( 'post_comment_status_meta_box-options', $post ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
870 ?>
871</p>
872 <?php
873}
874
875/**
876 * Displays comments for post table header
877 *
878 * @since 3.0.0
879 *
880 * @param array $result Table header rows.
881 * @return array
882 */
883function post_comment_meta_box_thead( $result ) {
884 unset( $result['cb'], $result['response'] );
885 return $result;
886}
887
888/**
889 * Displays comments for post.
890 *
891 * @since 2.8.0
892 *
893 * @param WP_Post $post Current post object.
894 */
895function post_comment_meta_box( $post ) {
896 wp_nonce_field( 'get-comments', 'add_comment_nonce', false );
897 ?>
898 <p class="hide-if-no-js" id="add-new-comment"><button type="button" class="button" onclick="window.commentReply && commentReply.addcomment(<?php echo $post->ID; ?>);"><?php _e( 'Add Comment' ); ?></button></p>
899 <?php
900
901 $total = get_comments(
902 array(
903 'post_id' => $post->ID,
904 'count' => true,
905 'orderby' => 'none',
906 )
907 );
908 $wp_list_table = _get_list_table( 'WP_Post_Comments_List_Table' );
909 $wp_list_table->display( true );
910
911 if ( 1 > $total ) {
912 echo '<p id="no-comments">' . __( 'No comments yet.' ) . '</p>';
913 } else {
914 $hidden = get_hidden_meta_boxes( get_current_screen() );
915 if ( ! in_array( 'commentsdiv', $hidden, true ) ) {
916 ?>
917 <script type="text/javascript">jQuery(function(){commentsBox.get(<?php echo $total; ?>, 10);});</script>
918 <?php
919 }
920
921 ?>
922 <p class="hide-if-no-js" id="show-comments"><a href="#commentstatusdiv" onclick="commentsBox.load(<?php echo $total; ?>);return false;"><?php _e( 'Show comments' ); ?></a> <span class="spinner"></span></p>
923 <?php
924 }
925
926 wp_comment_trashnotice();
927}
928
929/**
930 * Displays slug form fields.
931 *
932 * @since 2.6.0
933 *
934 * @param WP_Post $post Current post object.
935 */
936function post_slug_meta_box( $post ) {
937 /** This filter is documented in wp-admin/edit-tag-form.php */
938 $editable_slug = apply_filters( 'editable_slug', $post->post_name, $post );
939 ?>
940<label class="screen-reader-text" for="post_name">
941 <?php
942 /* translators: Hidden accessibility text. */
943 _e( 'Slug' );
944 ?>
945</label><input name="post_name" type="text" class="large-text" id="post_name" value="<?php echo esc_attr( $editable_slug ); ?>" />
946 <?php
947}
948
949/**
950 * Displays form field with list of authors.
951 *
952 * @since 2.6.0
953 *
954 * @global int $user_ID
955 *
956 * @param WP_Post $post Current post object.
957 */
958function post_author_meta_box( $post ) {
959 global $user_ID;
960
961 $post_type_object = get_post_type_object( $post->post_type );
962 ?>
963<label class="screen-reader-text" for="post_author_override">
964 <?php
965 /* translators: Hidden accessibility text. */
966 _e( 'Author' );
967 ?>
968</label>
969 <?php
970 wp_dropdown_users(
971 array(
972 'capability' => array( $post_type_object->cap->edit_posts ),
973 'name' => 'post_author_override',
974 'selected' => empty( $post->ID ) ? $user_ID : $post->post_author,
975 'include_selected' => true,
976 'show' => 'display_name_with_login',
977 )
978 );
979}
980
981/**
982 * Displays list of revisions.
983 *
984 * @since 2.6.0
985 *
986 * @param WP_Post $post Current post object.
987 */
988function post_revisions_meta_box( $post ) {
989 wp_list_post_revisions( $post );
990}
991
992//
993// Page-related Meta Boxes.
994//
995
996/**
997 * Displays page attributes form fields.
998 *
999 * @since 2.7.0
1000 *
1001 * @param WP_Post $post Current post object.
1002 */
1003function page_attributes_meta_box( $post ) {
1004 if ( is_post_type_hierarchical( $post->post_type ) ) :
1005 $dropdown_args = array(
1006 'post_type' => $post->post_type,
1007 'exclude_tree' => $post->ID,
1008 'selected' => $post->post_parent,
1009 'name' => 'parent_id',
1010 'show_option_none' => __( '(no parent)' ),
1011 'sort_column' => 'menu_order, post_title',
1012 'echo' => 0,
1013 );
1014
1015 /**
1016 * Filters the arguments used to generate a Pages drop-down element.
1017 *
1018 * @since 3.3.0
1019 *
1020 * @see wp_dropdown_pages()
1021 *
1022 * @param array $dropdown_args Array of arguments used to generate the pages drop-down.
1023 * @param WP_Post $post The current post.
1024 */
1025 $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post );
1026 $pages = wp_dropdown_pages( $dropdown_args );
1027 if ( ! empty( $pages ) ) :
1028 ?>
1029<p class="post-attributes-label-wrapper parent-id-label-wrapper"><label class="post-attributes-label" for="parent_id"><?php _e( 'Parent' ); ?></label></p>
1030 <?php echo $pages; ?>
1031 <?php
1032 endif; // End empty pages check.
1033 endif; // End hierarchical check.
1034
1035 if ( count( get_page_templates( $post ) ) > 0 && (int) get_option( 'page_for_posts' ) !== $post->ID ) :
1036 $template = ! empty( $post->page_template ) ? $post->page_template : false;
1037 ?>
1038<p class="post-attributes-label-wrapper page-template-label-wrapper"><label class="post-attributes-label" for="page_template"><?php _e( 'Template' ); ?></label>
1039 <?php
1040 /**
1041 * Fires immediately after the label inside the 'Template' section
1042 * of the 'Page Attributes' meta box.
1043 *
1044 * @since 4.4.0
1045 *
1046 * @param string|false $template The template used for the current post.
1047 * @param WP_Post $post The current post.
1048 */
1049 do_action( 'page_attributes_meta_box_template', $template, $post );
1050 ?>
1051</p>
1052<select name="page_template" id="page_template">
1053 <?php
1054 /**
1055 * Filters the title of the default page template displayed in the drop-down.
1056 *
1057 * @since 4.1.0
1058 *
1059 * @param string $label The display value for the default page template title.
1060 * @param string $context Where the option label is displayed. Possible values
1061 * include 'meta-box' or 'quick-edit'.
1062 */
1063 $default_title = apply_filters( 'default_page_template_title', __( 'Default template' ), 'meta-box' );
1064 ?>
1065<option value="default"><?php echo esc_html( $default_title ); ?></option>
1066 <?php page_template_dropdown( $template, $post->post_type ); ?>
1067</select>
1068<?php endif; ?>
1069 <?php if ( post_type_supports( $post->post_type, 'page-attributes' ) ) : ?>
1070<p class="post-attributes-label-wrapper menu-order-label-wrapper"><label class="post-attributes-label" for="menu_order"><?php _e( 'Order' ); ?></label></p>
1071<input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr( $post->menu_order ); ?>" />
1072 <?php
1073 /**
1074 * Fires before the help hint text in the 'Page Attributes' meta box.
1075 *
1076 * @since 4.9.0
1077 *
1078 * @param WP_Post $post The current post.
1079 */
1080 do_action( 'page_attributes_misc_attributes', $post );
1081 ?>
1082 <?php if ( 'page' === $post->post_type && get_current_screen()->get_help_tabs() ) : ?>
1083<p class="post-attributes-help-text"><?php _e( 'Need help? Use the Help tab above the screen title.' ); ?></p>
1084 <?php
1085 endif;
1086 endif;
1087}
1088
1089//
1090// Link-related Meta Boxes.
1091//
1092
1093/**
1094 * Displays link create form fields.
1095 *
1096 * @since 2.7.0
1097 *
1098 * @param object $link Current link object.
1099 */
1100function link_submit_meta_box( $link ) {
1101 ?>
1102<div class="submitbox" id="submitlink">
1103
1104<div id="minor-publishing">
1105
1106 <?php // Hidden submit button early on so that the browser chooses the right button when form is submitted with Return key. ?>
1107<div style="display:none;">
1108 <?php submit_button( __( 'Save' ), '', 'save', false ); ?>
1109</div>
1110
1111<div id="minor-publishing-actions">
1112<div id="preview-action">
1113 <?php if ( ! empty( $link->link_id ) ) { ?>
1114 <a class="preview button" href="<?php echo $link->link_url; ?>" target="_blank"><?php _e( 'Visit Link' ); ?></a>
1115<?php } ?>
1116</div>
1117<div class="clear"></div>
1118</div>
1119
1120<div id="misc-publishing-actions">
1121<div class="misc-pub-section misc-pub-private">
1122 <label for="link_private" class="selectit"><input id="link_private" name="link_visible" type="checkbox" value="N" <?php checked( $link->link_visible, 'N' ); ?> /> <?php _e( 'Keep this link private' ); ?></label>
1123</div>
1124</div>
1125
1126</div>
1127
1128<div id="major-publishing-actions">
1129 <?php
1130 /** This action is documented in wp-admin/includes/meta-boxes.php */
1131 do_action( 'post_submitbox_start', null );
1132 ?>
1133<div id="delete-action">
1134 <?php
1135 if ( ! empty( $_GET['action'] ) && 'edit' === $_GET['action'] && current_user_can( 'manage_links' ) ) {
1136 printf(
1137 '<a class="submitdelete deletion" href="%s" onclick="return confirm( \'%s\' );">%s</a>',
1138 wp_nonce_url( "link.php?action=delete&amp;link_id=$link->link_id", 'delete-bookmark_' . $link->link_id ),
1139 /* translators: %s: Link name. */
1140 esc_js( sprintf( __( "You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete." ), $link->link_name ) ),
1141 __( 'Delete' )
1142 );
1143 }
1144 ?>
1145</div>
1146
1147<div id="publishing-action">
1148 <?php if ( ! empty( $link->link_id ) ) { ?>
1149 <input name="save" type="submit" class="button button-primary button-large" id="publish" value="<?php esc_attr_e( 'Update Link' ); ?>" />
1150<?php } else { ?>
1151 <input name="save" type="submit" class="button button-primary button-large" id="publish" value="<?php esc_attr_e( 'Add Link' ); ?>" />
1152<?php } ?>
1153</div>
1154<div class="clear"></div>
1155</div>
1156 <?php
1157 /**
1158 * Fires at the end of the Publish box in the Link editing screen.
1159 *
1160 * @since 2.5.0
1161 */
1162 do_action( 'submitlink_box' );
1163 ?>
1164<div class="clear"></div>
1165</div>
1166 <?php
1167}
1168
1169/**
1170 * Displays link categories form fields.
1171 *
1172 * @since 2.6.0
1173 *
1174 * @param object $link Current link object.
1175 */
1176function link_categories_meta_box( $link ) {
1177 ?>
1178<div id="taxonomy-linkcategory" class="categorydiv">
1179 <ul id="category-tabs" class="category-tabs">
1180 <li class="tabs"><a href="#categories-all"><?php _e( 'All categories' ); ?></a></li>
1181 <li class="hide-if-no-js"><a href="#categories-pop"><?php _ex( 'Most Used', 'categories' ); ?></a></li>
1182 </ul>
1183
1184 <div id="categories-all" class="tabs-panel">
1185 <ul id="categorychecklist" data-wp-lists="list:category" class="categorychecklist form-no-clear">
1186 <?php
1187 if ( isset( $link->link_id ) ) {
1188 wp_link_category_checklist( $link->link_id );
1189 } else {
1190 wp_link_category_checklist();
1191 }
1192 ?>
1193 </ul>
1194 </div>
1195
1196 <div id="categories-pop" class="tabs-panel" style="display: none;">
1197 <ul id="categorychecklist-pop" class="categorychecklist form-no-clear">
1198 <?php wp_popular_terms_checklist( 'link_category' ); ?>
1199 </ul>
1200 </div>
1201
1202 <div id="category-adder" class="wp-hidden-children">
1203 <a id="category-add-toggle" href="#category-add" class="taxonomy-add-new"><?php _e( '+ Add Category' ); ?></a>
1204 <p id="link-category-add" class="wp-hidden-child">
1205 <label class="screen-reader-text" for="newcat">
1206 <?php
1207 /* translators: Hidden accessibility text. */
1208 _e( '+ Add Category' );
1209 ?>
1210 </label>
1211 <input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php esc_attr_e( 'New category name' ); ?>" aria-required="true" />
1212 <input type="button" id="link-category-add-submit" data-wp-lists="add:categorychecklist:link-category-add" class="button" value="<?php esc_attr_e( 'Add' ); ?>" />
1213 <?php wp_nonce_field( 'add-link-category', '_ajax_nonce', false ); ?>
1214 <span id="category-ajax-response"></span>
1215 </p>
1216 </div>
1217</div>
1218 <?php
1219}
1220
1221/**
1222 * Displays form fields for changing link target.
1223 *
1224 * @since 2.6.0
1225 *
1226 * @param object $link Current link object.
1227 */
1228function link_target_meta_box( $link ) {
1229
1230 ?>
1231<fieldset><legend class="screen-reader-text"><span><?php _e( 'Target' ); ?></span></legend>
1232<p><label for="link_target_blank" class="selectit">
1233<input id="link_target_blank" type="radio" name="link_target" value="_blank" <?php echo ( isset( $link->link_target ) && ( '_blank' === $link->link_target ) ? 'checked="checked"' : '' ); ?> />
1234 <?php _e( '<code>_blank</code> &mdash; new window or tab.' ); ?></label></p>
1235<p><label for="link_target_top" class="selectit">
1236<input id="link_target_top" type="radio" name="link_target" value="_top" <?php echo ( isset( $link->link_target ) && ( '_top' === $link->link_target ) ? 'checked="checked"' : '' ); ?> />
1237 <?php _e( '<code>_top</code> &mdash; current window or tab, with no frames.' ); ?></label></p>
1238<p><label for="link_target_none" class="selectit">
1239<input id="link_target_none" type="radio" name="link_target" value="" <?php echo ( isset( $link->link_target ) && ( '' === $link->link_target ) ? 'checked="checked"' : '' ); ?> />
1240 <?php _e( '<code>_none</code> &mdash; same window or tab.' ); ?></label></p>
1241</fieldset>
1242<p><?php _e( 'Choose the target frame for your link.' ); ?></p>
1243 <?php
1244}
1245
1246/**
1247 * Displays 'checked' checkboxes attribute for XFN microformat options.
1248 *
1249 * @since 1.0.1
1250 *
1251 * @global object $link Current link object.
1252 *
1253 * @param string $xfn_relationship XFN relationship category. Possible values are:
1254 * 'friendship', 'physical', 'professional',
1255 * 'geographical', 'family', 'romantic', 'identity'.
1256 * @param string $xfn_value Optional. The XFN value to mark as checked
1257 * if it matches the current link's relationship.
1258 * Default empty string.
1259 * @param mixed $deprecated Deprecated. Not used.
1260 */
1261function xfn_check( $xfn_relationship, $xfn_value = '', $deprecated = '' ) {
1262 global $link;
1263
1264 if ( ! empty( $deprecated ) ) {
1265 _deprecated_argument( __FUNCTION__, '2.5.0' ); // Never implemented.
1266 }
1267
1268 $link_rel = isset( $link->link_rel ) ? $link->link_rel : '';
1269 $link_rels = preg_split( '/\s+/', $link_rel );
1270
1271 // Mark the specified value as checked if it matches the current link's relationship.
1272 if ( '' !== $xfn_value && in_array( $xfn_value, $link_rels, true ) ) {
1273 echo ' checked="checked"';
1274 }
1275
1276 if ( '' === $xfn_value ) {
1277 // Mark the 'none' value as checked if the current link does not match the specified relationship.
1278 if ( 'family' === $xfn_relationship
1279 && ! array_intersect( $link_rels, array( 'child', 'parent', 'sibling', 'spouse', 'kin' ) )
1280 ) {
1281 echo ' checked="checked"';
1282 }
1283
1284 if ( 'friendship' === $xfn_relationship
1285 && ! array_intersect( $link_rels, array( 'friend', 'acquaintance', 'contact' ) )
1286 ) {
1287 echo ' checked="checked"';
1288 }
1289
1290 if ( 'geographical' === $xfn_relationship
1291 && ! array_intersect( $link_rels, array( 'co-resident', 'neighbor' ) )
1292 ) {
1293 echo ' checked="checked"';
1294 }
1295
1296 // Mark the 'me' value as checked if it matches the current link's relationship.
1297 if ( 'identity' === $xfn_relationship
1298 && in_array( 'me', $link_rels, true )
1299 ) {
1300 echo ' checked="checked"';
1301 }
1302 }
1303}
1304
1305/**
1306 * Displays XFN form fields.
1307 *
1308 * @since 2.6.0
1309 *
1310 * @param object $link Current link object.
1311 */
1312function link_xfn_meta_box( $link ) {
1313 ?>
1314<table class="links-table">
1315 <tr>
1316 <th scope="row"><label for="link_rel"><?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'rel:' ); ?></label></th>
1317 <td><input type="text" name="link_rel" id="link_rel" value="<?php echo ( isset( $link->link_rel ) ? esc_attr( $link->link_rel ) : '' ); ?>" /></td>
1318 </tr>
1319 <?php $identity_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'identity' ); ?>
1320 <tr>
1321 <th scope="row"><?php echo $identity_group_title; ?></th>
1322 <td><fieldset>
1323 <legend class="screen-reader-text"><span><?php echo $identity_group_title; ?></span></legend>
1324 <label for="me">
1325 <input type="checkbox" name="identity" value="me" id="me" <?php xfn_check( 'identity', 'me' ); ?> />
1326 <?php _e( 'another web address of mine' ); ?></label>
1327 </fieldset></td>
1328 </tr>
1329 <?php $friendship_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'friendship' ); ?>
1330 <tr>
1331 <th scope="row"><?php echo $friendship_group_title; ?></th>
1332 <td><fieldset>
1333 <legend class="screen-reader-text"><span><?php echo $friendship_group_title; ?></span></legend>
1334 <label for="contact">
1335 <input class="valinp" type="radio" name="friendship" value="contact" id="contact" <?php xfn_check( 'friendship', 'contact' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'contact' ); ?>
1336 </label>
1337 <label for="acquaintance">
1338 <input class="valinp" type="radio" name="friendship" value="acquaintance" id="acquaintance" <?php xfn_check( 'friendship', 'acquaintance' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'acquaintance' ); ?>
1339 </label>
1340 <label for="friend">
1341 <input class="valinp" type="radio" name="friendship" value="friend" id="friend" <?php xfn_check( 'friendship', 'friend' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'friend' ); ?>
1342 </label>
1343 <label for="friendship">
1344 <input name="friendship" type="radio" class="valinp" value="" id="friendship" <?php xfn_check( 'friendship' ); ?> />&nbsp;<?php /* translators: xfn (friendship relation): http://gmpg.org/xfn/ */ _ex( 'none', 'Type of relation' ); ?>
1345 </label>
1346 </fieldset></td>
1347 </tr>
1348 <?php $physical_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'physical' ); ?>
1349 <tr>
1350 <th scope="row"> <?php echo $physical_group_title; ?> </th>
1351 <td><fieldset>
1352 <legend class="screen-reader-text"><span><?php echo $physical_group_title; ?></span></legend>
1353 <label for="met">
1354 <input class="valinp" type="checkbox" name="physical" value="met" id="met" <?php xfn_check( 'physical', 'met' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'met' ); ?>
1355 </label>
1356 </fieldset></td>
1357 </tr>
1358 <?php $professional_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'professional' ); ?>
1359 <tr>
1360 <th scope="row"> <?php echo $professional_group_title; ?> </th>
1361 <td><fieldset>
1362 <legend class="screen-reader-text"><span><?php echo $professional_group_title; ?></span></legend>
1363 <label for="co-worker">
1364 <input class="valinp" type="checkbox" name="professional" value="co-worker" id="co-worker" <?php xfn_check( 'professional', 'co-worker' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'co-worker' ); ?>
1365 </label>
1366 <label for="colleague">
1367 <input class="valinp" type="checkbox" name="professional" value="colleague" id="colleague" <?php xfn_check( 'professional', 'colleague' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'colleague' ); ?>
1368 </label>
1369 </fieldset></td>
1370 </tr>
1371 <?php $geographical_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'geographical' ); ?>
1372 <tr>
1373 <th scope="row"><?php echo $geographical_group_title; ?></th>
1374 <td><fieldset>
1375 <legend class="screen-reader-text"><span><?php echo $geographical_group_title; ?></span></legend>
1376 <label for="co-resident">
1377 <input class="valinp" type="radio" name="geographical" value="co-resident" id="co-resident" <?php xfn_check( 'geographical', 'co-resident' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'co-resident' ); ?>
1378 </label>
1379 <label for="neighbor">
1380 <input class="valinp" type="radio" name="geographical" value="neighbor" id="neighbor" <?php xfn_check( 'geographical', 'neighbor' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'neighbor' ); ?>
1381 </label>
1382 <label for="geographical">
1383 <input class="valinp" type="radio" name="geographical" value="" id="geographical" <?php xfn_check( 'geographical' ); ?> />&nbsp;<?php /* translators: xfn (geographical relation): http://gmpg.org/xfn/ */ _ex( 'none', 'Type of relation' ); ?>
1384 </label>
1385 </fieldset></td>
1386 </tr>
1387 <?php $family_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'family' ); ?>
1388 <tr>
1389 <th scope="row"><?php echo $family_group_title; ?></th>
1390 <td><fieldset>
1391 <legend class="screen-reader-text"><span><?php echo $family_group_title; ?></span></legend>
1392 <label for="child">
1393 <input class="valinp" type="radio" name="family" value="child" id="child" <?php xfn_check( 'family', 'child' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'child' ); ?>
1394 </label>
1395 <label for="kin">
1396 <input class="valinp" type="radio" name="family" value="kin" id="kin" <?php xfn_check( 'family', 'kin' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'kin' ); ?>
1397 </label>
1398 <label for="parent">
1399 <input class="valinp" type="radio" name="family" value="parent" id="parent" <?php xfn_check( 'family', 'parent' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'parent' ); ?>
1400 </label>
1401 <label for="sibling">
1402 <input class="valinp" type="radio" name="family" value="sibling" id="sibling" <?php xfn_check( 'family', 'sibling' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'sibling' ); ?>
1403 </label>
1404 <label for="spouse">
1405 <input class="valinp" type="radio" name="family" value="spouse" id="spouse" <?php xfn_check( 'family', 'spouse' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'spouse' ); ?>
1406 </label>
1407 <label for="family">
1408 <input class="valinp" type="radio" name="family" value="" id="family" <?php xfn_check( 'family' ); ?> />&nbsp;<?php /* translators: xfn (family relation): http://gmpg.org/xfn/ */ _ex( 'none', 'Type of relation' ); ?>
1409 </label>
1410 </fieldset></td>
1411 </tr>
1412 <?php $romantic_group_title = /* translators: xfn: https://gmpg.org/xfn/ */ __( 'romantic' ); ?>
1413 <tr>
1414 <th scope="row"><?php echo $romantic_group_title; ?></th>
1415 <td><fieldset>
1416 <legend class="screen-reader-text"><span><?php echo $romantic_group_title; ?></span></legend>
1417 <label for="muse">
1418 <input class="valinp" type="checkbox" name="romantic" value="muse" id="muse" <?php xfn_check( 'romantic', 'muse' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'muse' ); ?>
1419 </label>
1420 <label for="crush">
1421 <input class="valinp" type="checkbox" name="romantic" value="crush" id="crush" <?php xfn_check( 'romantic', 'crush' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'crush' ); ?>
1422 </label>
1423 <label for="date">
1424 <input class="valinp" type="checkbox" name="romantic" value="date" id="date" <?php xfn_check( 'romantic', 'date' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'date' ); ?>
1425 </label>
1426 <label for="romantic">
1427 <input class="valinp" type="checkbox" name="romantic" value="sweetheart" id="romantic" <?php xfn_check( 'romantic', 'sweetheart' ); ?> />&nbsp;<?php /* translators: xfn: https://gmpg.org/xfn/ */ _e( 'sweetheart' ); ?>
1428 </label>
1429 </fieldset></td>
1430 </tr>
1431
1432</table>
1433<p><?php _e( 'If the link is to a person, you can specify your relationship with them using the above form. If you would like to learn more about the idea check out <a href="https://gmpg.org/xfn/">XFN</a>.' ); ?></p>
1434 <?php
1435}
1436
1437/**
1438 * Displays advanced link options form fields.
1439 *
1440 * @since 2.6.0
1441 *
1442 * @param object $link Current link object.
1443 */
1444function link_advanced_meta_box( $link ) {
1445 ?>
1446<table class="links-table" cellpadding="0">
1447 <tr>
1448 <th scope="row"><label for="link_image"><?php _e( 'Image Address' ); ?></label></th>
1449 <td><input type="text" name="link_image" class="code" id="link_image" maxlength="255" value="<?php echo ( isset( $link->link_image ) ? esc_attr( $link->link_image ) : '' ); ?>" /></td>
1450 </tr>
1451 <tr>
1452 <th scope="row"><label for="rss_uri"><?php _e( 'RSS Address' ); ?></label></th>
1453 <td><input name="link_rss" class="code" type="text" id="rss_uri" maxlength="255" value="<?php echo ( isset( $link->link_rss ) ? esc_attr( $link->link_rss ) : '' ); ?>" /></td>
1454 </tr>
1455 <tr>
1456 <th scope="row"><label for="link_notes"><?php _e( 'Notes' ); ?></label></th>
1457 <td><textarea name="link_notes" id="link_notes" rows="10"><?php echo ( isset( $link->link_notes ) ? $link->link_notes : '' ); // textarea_escaped ?></textarea></td>
1458 </tr>
1459 <tr>
1460 <th scope="row"><label for="link_rating"><?php _e( 'Rating' ); ?></label></th>
1461 <td><select name="link_rating" id="link_rating" size="1">
1462 <?php
1463 for ( $rating = 0; $rating <= 10; $rating++ ) {
1464 echo '<option value="' . $rating . '"';
1465 if ( isset( $link->link_rating ) && $link->link_rating === $rating ) {
1466 echo ' selected="selected"';
1467 }
1468 echo '>' . $rating . '</option>';
1469 }
1470 ?>
1471 </select>&nbsp;<?php _e( '(Leave at 0 for no rating.)' ); ?>
1472 </td>
1473 </tr>
1474</table>
1475 <?php
1476}
1477
1478/**
1479 * Displays post thumbnail meta box.
1480 *
1481 * @since 2.9.0
1482 *
1483 * @param WP_Post $post Current post object.
1484 */
1485function post_thumbnail_meta_box( $post ) {
1486 $thumbnail_id = get_post_meta( $post->ID, '_thumbnail_id', true );
1487 echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID );
1488}
1489
1490/**
1491 * Displays fields for ID3 data.
1492 *
1493 * @since 3.9.0
1494 *
1495 * @param WP_Post $post Current post object.
1496 */
1497function attachment_id3_data_meta_box( $post ) {
1498 $meta = array();
1499 if ( ! empty( $post->ID ) ) {
1500 $meta = wp_get_attachment_metadata( $post->ID );
1501 }
1502
1503 foreach ( wp_get_attachment_id3_keys( $post, 'edit' ) as $key => $label ) :
1504 $value = '';
1505 if ( ! empty( $meta[ $key ] ) ) {
1506 $value = $meta[ $key ];
1507 }
1508 ?>
1509 <p>
1510 <label for="title"><?php echo $label; ?></label><br />
1511 <input type="text" name="id3_<?php echo esc_attr( $key ); ?>" id="id3_<?php echo esc_attr( $key ); ?>" class="large-text" value="<?php echo esc_attr( $value ); ?>" />
1512 </p>
1513 <?php
1514 endforeach;
1515}
1516
1517/**
1518 * Registers the default post meta boxes, and runs the `do_meta_boxes` actions.
1519 *
1520 * @since 5.0.0
1521 *
1522 * @param WP_Post $post The post object that these meta boxes are being generated for.
1523 */
1524function register_and_do_post_meta_boxes( $post ) {
1525 $post_type = $post->post_type;
1526 $post_type_object = get_post_type_object( $post_type );
1527
1528 $thumbnail_support = current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' );
1529 if ( ! $thumbnail_support && 'attachment' === $post_type && $post->post_mime_type ) {
1530 if ( wp_attachment_is( 'audio', $post ) ) {
1531 $thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' );
1532 } elseif ( wp_attachment_is( 'video', $post ) ) {
1533 $thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' );
1534 }
1535 }
1536
1537 $publish_callback_args = array( '__back_compat_meta_box' => true );
1538
1539 if ( post_type_supports( $post_type, 'revisions' ) && 'auto-draft' !== $post->post_status ) {
1540 $revisions = wp_get_latest_revision_id_and_total_count( $post->ID );
1541
1542 // We should aim to show the revisions meta box only when there are revisions.
1543 if ( ! is_wp_error( $revisions ) && $revisions['count'] > 1 ) {
1544 $publish_callback_args = array(
1545 'revisions_count' => $revisions['count'],
1546 'revision_id' => $revisions['latest_id'],
1547 '__back_compat_meta_box' => true,
1548 );
1549
1550 add_meta_box( 'revisionsdiv', __( 'Revisions' ), 'post_revisions_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1551 }
1552 }
1553
1554 if ( 'attachment' === $post_type ) {
1555 wp_enqueue_script( 'image-edit' );
1556 wp_enqueue_style( 'imgareaselect' );
1557 add_meta_box( 'submitdiv', __( 'Save' ), 'attachment_submit_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) );
1558 add_action( 'edit_form_after_title', 'edit_form_image_editor' );
1559
1560 if ( wp_attachment_is( 'audio', $post ) ) {
1561 add_meta_box( 'attachment-id3', __( 'Metadata' ), 'attachment_id3_data_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1562 }
1563 } else {
1564 add_meta_box( 'submitdiv', __( 'Publish' ), 'post_submit_meta_box', null, 'side', 'core', $publish_callback_args );
1565 }
1566
1567 if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post_type, 'post-formats' ) ) {
1568 add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) );
1569 }
1570
1571 // All taxonomies.
1572 foreach ( get_object_taxonomies( $post ) as $tax_name ) {
1573 $taxonomy = get_taxonomy( $tax_name );
1574 if ( ! $taxonomy->show_ui || false === $taxonomy->meta_box_cb ) {
1575 continue;
1576 }
1577
1578 $label = $taxonomy->labels->name;
1579
1580 if ( ! is_taxonomy_hierarchical( $tax_name ) ) {
1581 $tax_meta_box_id = 'tagsdiv-' . $tax_name;
1582 } else {
1583 $tax_meta_box_id = $tax_name . 'div';
1584 }
1585
1586 add_meta_box(
1587 $tax_meta_box_id,
1588 $label,
1589 $taxonomy->meta_box_cb,
1590 null,
1591 'side',
1592 'core',
1593 array(
1594 'taxonomy' => $tax_name,
1595 '__back_compat_meta_box' => true,
1596 )
1597 );
1598 }
1599
1600 if ( post_type_supports( $post_type, 'page-attributes' ) || count( get_page_templates( $post ) ) > 0 ) {
1601 add_meta_box( 'pageparentdiv', $post_type_object->labels->attributes, 'page_attributes_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) );
1602 }
1603
1604 if ( $thumbnail_support && current_user_can( 'upload_files' ) ) {
1605 add_meta_box( 'postimagediv', esc_html( $post_type_object->labels->featured_image ), 'post_thumbnail_meta_box', null, 'side', 'low', array( '__back_compat_meta_box' => true ) );
1606 }
1607
1608 if ( post_type_supports( $post_type, 'excerpt' ) ) {
1609 add_meta_box( 'postexcerpt', __( 'Excerpt' ), 'post_excerpt_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1610 }
1611
1612 if ( post_type_supports( $post_type, 'trackbacks' ) ) {
1613 add_meta_box( 'trackbacksdiv', __( 'Send Trackbacks' ), 'post_trackback_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1614 }
1615
1616 if ( post_type_supports( $post_type, 'custom-fields' ) ) {
1617 add_meta_box(
1618 'postcustom',
1619 __( 'Custom Fields' ),
1620 'post_custom_meta_box',
1621 null,
1622 'normal',
1623 'core',
1624 array(
1625 '__back_compat_meta_box' => ! (bool) get_user_meta( get_current_user_id(), 'enable_custom_fields', true ),
1626 '__block_editor_compatible_meta_box' => true,
1627 )
1628 );
1629 }
1630
1631 /**
1632 * Fires in the middle of built-in meta box registration.
1633 *
1634 * @since 2.1.0
1635 * @deprecated 3.7.0 Use {@see 'add_meta_boxes'} instead.
1636 *
1637 * @param WP_Post $post Post object.
1638 */
1639 do_action_deprecated( 'dbx_post_advanced', array( $post ), '3.7.0', 'add_meta_boxes' );
1640
1641 /*
1642 * Allow the Discussion meta box to show up if the post type supports comments,
1643 * or if comments or pings are open.
1644 */
1645 if ( comments_open( $post ) || pings_open( $post ) || post_type_supports( $post_type, 'comments' ) ) {
1646 add_meta_box( 'commentstatusdiv', __( 'Discussion' ), 'post_comment_status_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1647 }
1648
1649 $statuses = get_post_stati( array( 'public' => true ) );
1650
1651 if ( empty( $statuses ) ) {
1652 $statuses = array( 'publish' );
1653 }
1654
1655 $statuses[] = 'private';
1656
1657 if ( in_array( get_post_status( $post ), $statuses, true ) ) {
1658 /*
1659 * If the post type support comments, or the post has comments,
1660 * allow the Comments meta box.
1661 */
1662 if ( comments_open( $post ) || pings_open( $post ) || $post->comment_count > 0 || post_type_supports( $post_type, 'comments' ) ) {
1663 add_meta_box( 'commentsdiv', __( 'Comments' ), 'post_comment_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1664 }
1665 }
1666
1667 if ( ! ( 'pending' === get_post_status( $post ) && ! current_user_can( $post_type_object->cap->publish_posts ) ) ) {
1668 add_meta_box( 'slugdiv', __( 'Slug' ), 'post_slug_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1669 }
1670
1671 if ( post_type_supports( $post_type, 'author' ) && current_user_can( $post_type_object->cap->edit_others_posts ) ) {
1672 add_meta_box( 'authordiv', __( 'Author' ), 'post_author_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
1673 }
1674
1675 /**
1676 * Fires after all built-in meta boxes have been added.
1677 *
1678 * @since 3.0.0
1679 *
1680 * @param string $post_type Post type.
1681 * @param WP_Post $post Post object.
1682 */
1683 do_action( 'add_meta_boxes', $post_type, $post );
1684
1685 /**
1686 * Fires after all built-in meta boxes have been added, contextually for the given post type.
1687 *
1688 * The dynamic portion of the hook name, `$post_type`, refers to the post type of the post.
1689 *
1690 * Possible hook names include:
1691 *
1692 * - `add_meta_boxes_post`
1693 * - `add_meta_boxes_page`
1694 * - `add_meta_boxes_attachment`
1695 *
1696 * @since 3.0.0
1697 *
1698 * @param WP_Post $post Post object.
1699 */
1700 do_action( "add_meta_boxes_{$post_type}", $post );
1701
1702 /**
1703 * Fires after meta boxes have been added.
1704 *
1705 * Fires once for each of the default meta box contexts: normal, advanced, and side.
1706 *
1707 * @since 3.0.0
1708 *
1709 * @param string $post_type Post type of the post on Edit Post screen, 'link' on Edit Link screen,
1710 * 'dashboard' on Dashboard screen.
1711 * @param string $context Meta box context. Possible values include 'normal', 'advanced', 'side'.
1712 * @param WP_Post|object|string $post Post object on Edit Post screen, link object on Edit Link screen,
1713 * an empty string on Dashboard screen.
1714 */
1715 do_action( 'do_meta_boxes', $post_type, 'normal', $post );
1716 /** This action is documented in wp-admin/includes/meta-boxes.php */
1717 do_action( 'do_meta_boxes', $post_type, 'advanced', $post );
1718 /** This action is documented in wp-admin/includes/meta-boxes.php */
1719 do_action( 'do_meta_boxes', $post_type, 'side', $post );
1720}
1721
Ui Ux Design – Teachers Night Out https://cardgames4educators.com Wed, 16 Oct 2024 22:24:18 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 https://cardgames4educators.com/wp-content/uploads/2024/06/cropped-Card-4-Educators-logo-32x32.png Ui Ux Design – Teachers Night Out https://cardgames4educators.com 32 32 Masters In English How English Speaker https://cardgames4educators.com/masters-in-english-how-english-speaker/ https://cardgames4educators.com/masters-in-english-how-english-speaker/#comments Mon, 27 May 2024 08:54:45 +0000 https://themexriver.com/wp/kadu/?p=1

Erat himenaeos neque id sagittis massa. Hac suscipit pulvinar dignissim platea magnis eu. Don tellus a pharetra inceptos efficitur dui pulvinar. Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent pulvinar odio volutpat parturient. Quisque risus finibus suspendisse mus purus magnis facilisi condimentum consectetur dui. Curae elit suspendisse cursus vehicula.

Turpis taciti class non vel pretium quis pulvinar tempor lobortis nunc. Libero phasellus parturient sapien volutpat malesuada ornare. Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae. Porta est tempor ex eget feugiat vulputate ipsum. Justo nec iaculis habitant diam arcu fermentum.

We offer comprehen sive emplo ment services such as assistance wit employer compliance.Our company is your strategic HR partner as instead of HR. john smithson

Cubilia dignissim sollicitudin rhoncus lacinia maximus. Cras lorem fermentum bibendum pellentesque nisl etiam ligula enim cubilia. Vulputate pede sapien torquent montes tempus malesuada in mattis dis turpis vitae.

Exploring Learning Landscapes in Academic

Feugiat facilisis penatibus pulvinar nunc dictumst donec odio platea habitasse. Lacus porta dolor purus elit ante bibendum tortor netus taciti nullam cubilia. Erat per suspendisse placerat morbi egestas pulvinar bibendum sollicitudin nec. Euismod cubilia eleifend velit himenaeos sodales lectus. Leo maximus cras ac porttitor aliquam torquent.

]]>
https://cardgames4educators.com/masters-in-english-how-english-speaker/feed/ 1