Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Add a "deck" (aka subhead) meta box to post page(s) and position it
- * under the title.
- *
- * @todo Move to class.
- * @see http://codex.wordpress.org/Function_Reference/add_meta_box
- * @see http://wordpress.org/extend/ideas/topic/add-meta-box-to-multiple-post-types
- * @see https://github.com/Horttcore/WordPress-Subtitle
- * @see http://codex.wordpress.org/Function_Reference/wp_nonce_field
- */
- # Adds a box to the main column on the Post and Page edit screens:
- function foo_deck($post_type) {
- # Allowed post types to show meta box:
- $post_types = array('post', 'page');
- if (in_array($post_type, $post_types)) {
- # Add a meta box to the administrative interface:
- add_meta_box(
- 'foo-deck-meta-box', // HTML 'id' attribute of the edit screen section.
- 'Deck', // Title of the edit screen section, visible to user.
- 'foo_deck_meta_box', // Function that prints out the HTML for the edit screen section.
- $post_type, // The type of Write screen on which to show the edit screen section.
- 'advanced', // The part of the page where the edit screen section should be shown.
- 'high' // The priority within the context where the boxes should show.
- );
- }
- }
- # Callback that prints the box content:
- function foo_deck_meta_box($post) {
- # Use `get_post_meta()` to retrieve an existing value from the database and use the value for the form:
- $deck = get_post_meta($post->ID, '_deck', true);
- # Form field to display:
- ?>
- <label class="screen-reader-text" for="foo_deck">Deck</label>
- <input id="foo_deck" type="text" autocomplete="off" value="<?=esc_attr($deck)?>" name="foo_deck" placeholder="Deck">
- <?php
- # Display the nonce hidden form field:
- wp_nonce_field(
- plugin_basename(__FILE__), // Action name.
- 'foo_deck_meta_box' // Nonce name.
- );
- }
- /**
- * @see http://wordpress.stackexchange.com/a/16267/32387
- */
- # Save our custom data when the post is saved:
- function foo_deck_save_postdata($post_id) {
- # Is the current user is authorised to do this action?
- if ((($_POST['post_type'] === 'page') && current_user_can('edit_page', $post_id) || current_user_can('edit_post', $post_id))) { // If it's a page, OR, if it's a post, can the user edit it?
- # Stop WP from clearing custom fields on autosave:
- if ((( ! defined('DOING_AUTOSAVE')) || ( ! DOING_AUTOSAVE)) && (( ! defined('DOING_AJAX')) || ( ! DOING_AJAX))) {
- # Nonce verification:
- if (wp_verify_nonce($_POST['foo_deck_meta_box'], plugin_basename(__FILE__))) {
- # Get the posted deck:
- $deck = sanitize_text_field($_POST['foo_deck']);
- # Add, update or delete?
- if ($deck !== '') {
- # Deck exists, so add OR update it:
- add_post_meta($post_id, '_deck', $deck, true) OR update_post_meta($post_id, '_deck', $deck);
- } else {
- # Deck empty or removed:
- delete_post_meta($post_id, '_deck');
- }
- }
- }
- }
- }
- # Get the deck:
- function foo_get_deck($post_id = FALSE) {
- $post_id = ($post_id) ? $post_id : get_the_ID();
- return apply_filters('foo_the_deck', get_post_meta($post_id, '_deck', TRUE));
- }
- # Display deck (this will feel better when OOP):
- function foo_the_deck() {
- echo foo_get_deck(get_the_ID());
- }
- # Conditional checker:
- function foo_has_subtitle($post_id = FALSE) {
- if (foo_get_deck($post_id)) return TRUE;
- }
- # Define the custom box:
- add_action('add_meta_boxes', 'foo_deck');
- # Do something with the data entered:
- add_action('save_post', 'foo_deck_save_postdata');
- /**
- * @see http://wordpress.stackexchange.com/questions/36600
- * @see http://wordpress.stackexchange.com/questions/94530/
- */
- # Now move advanced meta boxes after the title:
- function foo_move_deck() {
- # Get the globals:
- global $post, $wp_meta_boxes;
- # Output the "advanced" meta boxes:
- do_meta_boxes(get_current_screen(), 'advanced', $post);
- # Remove the initial "advanced" meta boxes:
- unset($wp_meta_boxes['post']['advanced']);
- }
- add_action('edit_form_after_title', 'foo_move_deck');
- function foo_deck( $post_type ) {
- if ( in_array( $post_type, array( 'post', 'page' ) ) ) {
- add_meta_box(
- 'contact_details_meta',
- 'Contact Details',
- 'contact_details_meta',
- $post_type,
- 'test', // change to something other then normal, advanced or side
- 'high'
- );
- }
- add_action('add_meta_boxes', 'foo_deck');
- function foo_move_deck() {
- # Get the globals:
- global $post, $wp_meta_boxes;
- # Output the "advanced" meta boxes:
- do_meta_boxes( get_current_screen(), 'test', $post );
- # Remove the initial "advanced" meta boxes:
- unset($wp_meta_boxes['post']['test']);
- }
- add_action('edit_form_after_title', 'foo_move_deck');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement