[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-admin/ -> edit-form-advanced.php (source)

   1  <?php
   2  /**
   3   * Post advanced form for inclusion in the administration panels.
   4   *
   5   * @package WordPress
   6   * @subpackage Administration
   7   */
   8  
   9  // don't load directly
  10  if ( !defined('ABSPATH') )
  11      die('-1');
  12  
  13  wp_enqueue_script('post');
  14  
  15  if ( wp_is_mobile() )
  16      wp_enqueue_script( 'jquery-touch-punch' );
  17  
  18  if ( post_type_supports($post_type, 'editor') || post_type_supports($post_type, 'thumbnail') ) {
  19      add_thickbox();
  20      wp_enqueue_script('media-upload');
  21  }
  22  
  23  /**
  24   * Post ID global
  25   * @name $post_ID
  26   * @var int
  27   */
  28  $post_ID = isset($post_ID) ? (int) $post_ID : 0;
  29  $user_ID = isset($user_ID) ? (int) $user_ID : 0;
  30  $action = isset($action) ? $action : '';
  31  
  32  $messages = array();
  33  $messages['post'] = array(
  34       0 => '', // Unused. Messages start at index 1.
  35       1 => sprintf( __('Post updated. <a href="%s">View post</a>'), esc_url( get_permalink($post_ID) ) ),
  36       2 => __('Custom field updated.'),
  37       3 => __('Custom field deleted.'),
  38       4 => __('Post updated.'),
  39      /* translators: %s: date and time of the revision */
  40       5 => isset($_GET['revision']) ? sprintf( __('Post restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
  41       6 => sprintf( __('Post published. <a href="%s">View post</a>'), esc_url( get_permalink($post_ID) ) ),
  42       7 => __('Post saved.'),
  43       8 => sprintf( __('Post submitted. <a target="_blank" href="%s">Preview post</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  44       9 => sprintf( __('Post scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview post</a>'),
  45          // translators: Publish box date format, see http://php.net/date
  46          date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
  47      10 => sprintf( __('Post draft updated. <a target="_blank" href="%s">Preview post</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  48  );
  49  $messages['page'] = array(
  50       0 => '', // Unused. Messages start at index 1.
  51       1 => sprintf( __('Page updated. <a href="%s">View page</a>'), esc_url( get_permalink($post_ID) ) ),
  52       2 => __('Custom field updated.'),
  53       3 => __('Custom field deleted.'),
  54       4 => __('Page updated.'),
  55       5 => isset($_GET['revision']) ? sprintf( __('Page restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
  56       6 => sprintf( __('Page published. <a href="%s">View page</a>'), esc_url( get_permalink($post_ID) ) ),
  57       7 => __('Page saved.'),
  58       8 => sprintf( __('Page submitted. <a target="_blank" href="%s">Preview page</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  59       9 => sprintf( __('Page scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview page</a>'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
  60      10 => sprintf( __('Page draft updated. <a target="_blank" href="%s">Preview page</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  61  );
  62  
  63  $messages = apply_filters( 'post_updated_messages', $messages );
  64  
  65  $message = false;
  66  if ( isset($_GET['message']) ) {
  67      $_GET['message'] = absint( $_GET['message'] );
  68      if ( isset($messages[$post_type][$_GET['message']]) )
  69          $message = $messages[$post_type][$_GET['message']];
  70      elseif ( !isset($messages[$post_type]) && isset($messages['post'][$_GET['message']]) )
  71          $message = $messages['post'][$_GET['message']];
  72  }
  73  
  74  $notice = false;
  75  $form_extra = '';
  76  if ( 'auto-draft' == $post->post_status ) {
  77      if ( 'edit' == $action )
  78          $post->post_title = '';
  79      $autosave = false;
  80      $form_extra .= "<input type='hidden' id='auto_draft' name='auto_draft' value='1' />";
  81  } else {
  82      $autosave = wp_get_post_autosave( $post_ID );
  83  }
  84  
  85  $form_action = 'editpost';
  86  $nonce_action = 'update-' . $post_type . '_' . $post_ID;
  87  $form_extra .= "<input type='hidden' id='post_ID' name='post_ID' value='" . esc_attr($post_ID) . "' />";
  88  
  89  // Detect if there exists an autosave newer than the post and if that autosave is different than the post
  90  if ( $autosave && mysql2date( 'U', $autosave->post_modified_gmt, false ) > mysql2date( 'U', $post->post_modified_gmt, false ) ) {
  91      foreach ( _wp_post_revision_fields() as $autosave_field => $_autosave_field ) {
  92          if ( normalize_whitespace( $autosave->$autosave_field ) != normalize_whitespace( $post->$autosave_field ) ) {
  93              $notice = sprintf( __( 'There is an autosave of this post that is more recent than the version below. <a href="%s">View the autosave</a>' ), get_edit_post_link( $autosave->ID ) );
  94              break;
  95          }
  96      }
  97      unset($autosave_field, $_autosave_field);
  98  }
  99  
 100  $post_type_object = get_post_type_object($post_type);
 101  
 102  // All meta boxes should be defined and added before the first do_meta_boxes() call (or potentially during the do_meta_boxes action).
 103  require_once ('./includes/meta-boxes.php');
 104  
 105  add_meta_box('submitdiv', __('Publish'), 'post_submit_meta_box', null, 'side', 'core');
 106  
 107  if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post_type, 'post-formats' ) )
 108      add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core' );
 109  
 110  // all taxonomies
 111  foreach ( get_object_taxonomies($post_type) as $tax_name ) {
 112      $taxonomy = get_taxonomy($tax_name);
 113      if ( ! $taxonomy->show_ui )
 114          continue;
 115  
 116      $label = $taxonomy->labels->name;
 117  
 118      if ( !is_taxonomy_hierarchical($tax_name) )
 119          add_meta_box('tagsdiv-' . $tax_name, $label, 'post_tags_meta_box', null, 'side', 'core', array( 'taxonomy' => $tax_name ));
 120      else
 121          add_meta_box($tax_name . 'div', $label, 'post_categories_meta_box', null, 'side', 'core', array( 'taxonomy' => $tax_name ));
 122  }
 123  
 124  if ( post_type_supports($post_type, 'page-attributes') )
 125      add_meta_box('pageparentdiv', 'page' == $post_type ? __('Page Attributes') : __('Attributes'), 'page_attributes_meta_box', null, 'side', 'core');
 126  
 127  if ( current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' ) )
 128          add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', null, 'side', 'low');
 129  
 130  if ( post_type_supports($post_type, 'excerpt') )
 131      add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', null, 'normal', 'core');
 132  
 133  if ( post_type_supports($post_type, 'trackbacks') )
 134      add_meta_box('trackbacksdiv', __('Send Trackbacks'), 'post_trackback_meta_box', null, 'normal', 'core');
 135  
 136  if ( post_type_supports($post_type, 'custom-fields') )
 137      add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', null, 'normal', 'core');
 138  
 139  do_action('dbx_post_advanced');
 140  if ( post_type_supports($post_type, 'comments') )
 141      add_meta_box('commentstatusdiv', __('Discussion'), 'post_comment_status_meta_box', null, 'normal', 'core');
 142  
 143  if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
 144      add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', null, 'normal', 'core');
 145  
 146  if ( !( 'pending' == $post->post_status && !current_user_can( $post_type_object->cap->publish_posts ) ) )
 147      add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core');
 148  
 149  if ( post_type_supports($post_type, 'author') ) {
 150      if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) )
 151          add_meta_box('authordiv', __('Author'), 'post_author_meta_box', null, 'normal', 'core');
 152  }
 153  
 154  if ( post_type_supports($post_type, 'revisions') && 0 < $post_ID && wp_get_post_revisions( $post_ID ) )
 155      add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core');
 156  
 157  do_action('add_meta_boxes', $post_type, $post);
 158  do_action('add_meta_boxes_' . $post_type, $post);
 159  
 160  do_action('do_meta_boxes', $post_type, 'normal', $post);
 161  do_action('do_meta_boxes', $post_type, 'advanced', $post);
 162  do_action('do_meta_boxes', $post_type, 'side', $post);
 163  
 164  add_screen_option('layout_columns', array('max' => 2, 'default' => 2) );
 165  
 166  if ( 'post' == $post_type ) {
 167      $customize_display = '<p>' . __('The title field and the big Post Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen.') . '</p>';
 168  
 169      get_current_screen()->add_help_tab( array(
 170          'id'      => 'customize-display',
 171          'title'   => __('Customizing This Display'),
 172          'content' => $customize_display,
 173      ) );
 174  
 175      $title_and_editor  = '<p>' . __('<strong>Title</strong> - Enter a title for your post. After you enter a title, you&#8217;ll see the permalink below, which you can edit.') . '</p>';
 176      $title_and_editor .= '<p>' . __('<strong>Post editor</strong> - Enter the text for your post. There are two modes of editing: Visual and HTML. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The HTML mode allows you to enter raw HTML along with your post text. You can insert media files by clicking the icons above the post editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in HTML mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular post editor.') . '</p>';
 177  
 178      get_current_screen()->add_help_tab( array(
 179          'id'      => 'title-post-editor',
 180          'title'   => __('Title and Post Editor'),
 181          'content' => $title_and_editor,
 182      ) );
 183  
 184      $publish_box = '<p>' . __('<strong>Publish</strong> - You can set the terms of publishing your post in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a post to be published in the future or backdate a post.') . '</p>';
 185  
 186      if ( current_theme_supports( 'post-formats' ) && post_type_supports( 'post', 'post-formats' ) ) {
 187          $publish_box .= '<p>' . __( '<strong>Post Format</strong> - This designates how your theme will display a specific post. For example, you could have a <em>standard</em> blog post with a title and paragraphs, or a short <em>aside</em> that omits the title and contains a short text blurb. Please refer to the Codex for <a href="http://codex.wordpress.org/Post_Formats#Supported_Formats">descriptions of each post format</a>. Your theme could enable all or some of 10 possible formats.' ) . '</p>';
 188      }
 189  
 190      if ( current_theme_supports( 'post-thumbnails' ) && post_type_supports( 'post', 'thumbnail' ) ) {
 191          $publish_box .= '<p>' . __('<strong>Featured Image</strong> - This allows you to associate an image with your post without inserting it. This is usually useful only if your theme makes use of the featured image as a post thumbnail on the home page, a custom header, etc.') . '</p>';
 192      }
 193  
 194      get_current_screen()->add_help_tab( array(
 195          'id'      => 'publish-box',
 196          'title'   => __('Publish Box'),
 197          'content' => $publish_box,
 198      ) );
 199  
 200      $discussion_settings  = '<p>' . __('<strong>Send Trackbacks</strong> - Trackbacks are a way to notify legacy blog systems that you&#8217;ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they&#8217;ll be notified automatically using pingbacks, and this field is unnecessary.') . '</p>';
 201      $discussion_settings .= '<p>' . __('<strong>Discussion</strong> - You can turn comments and pings on or off, and if there are comments on the post, you can see them here and moderate them.') . '</p>';
 202  
 203      get_current_screen()->add_help_tab( array(
 204          'id'      => 'discussion-settings',
 205          'title'   => __('Discussion Settings'),
 206          'content' => $discussion_settings,
 207      ) );
 208  
 209      get_current_screen()->set_help_sidebar(
 210              '<p>' . sprintf(__('You can also create posts with the <a href="%s">Press This bookmarklet</a>.'), 'options-writing.php') . '</p>' .
 211              '<p><strong>' . __('For more information:') . '</strong></p>' .
 212              '<p>' . __('<a href="http://codex.wordpress.org/Posts_Add_New_Screen" target="_blank">Documentation on Writing and Editing Posts</a>') . '</p>' .
 213              '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
 214      );
 215  } elseif ( 'page' == $post_type ) {
 216      $about_pages = '<p>' . __('Pages are similar to Posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest Pages under other Pages by making one the &#8220;Parent&#8221; of the other, creating a group of Pages.') . '</p>' .
 217          '<p>' . __('Creating a Page is very similar to creating a Post, and the screens can be customized in the same way using drag and drop, the Screen Options tab, and expanding/collapsing boxes as you choose. This screen also has the distraction-free writing space, available in both the Visual and HTML modes via the Fullscreen buttons. The Page editor mostly works the same as the Post editor, but there are some Page-specific features in the Page Attributes box:') . '</p>';
 218  
 219      get_current_screen()->add_help_tab( array(
 220          'id'      => 'about-pages',
 221          'title'   => __('About Pages'),
 222          'content' => $about_pages,
 223      ) );
 224  
 225      $page_attributes = '<p>' . __('<strong>Parent</strong> - You can arrange your pages in hierarchies. For example, you could have an &#8220;About&#8221; page that has &#8220;Life Story&#8221; and &#8220;My Dog&#8221; pages under it. There are no limits to how many levels you can nest pages.') . '</p>' .
 226          '<p>' . __('<strong>Template</strong> - Some themes have custom templates you can use for certain pages that might have additional features or custom layouts. If so, you&#8217;ll see them in this dropdown menu.') . '</p>' .
 227          '<p>' . __('<strong>Order</strong> - Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field.') . '</p>';
 228  
 229      get_current_screen()->add_help_tab( array(
 230          'id' => 'page-attributes',
 231          'title' => __('Page Attributes'),
 232          'content' => $page_attributes,
 233      ) );
 234  
 235      get_current_screen()->set_help_sidebar(
 236              '<p><strong>' . __('For more information:') . '</strong></p>' .
 237              '<p>' . __('<a href="http://codex.wordpress.org/Pages_Add_New_Screen" target="_blank">Documentation on Adding New Pages</a>') . '</p>' .
 238              '<p>' . __('<a href="http://codex.wordpress.org/Pages_Screen#Editing_Individual_Pages" target="_blank">Documentation on Editing Pages</a>') . '</p>' .
 239              '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
 240      );
 241  }
 242  
 243  require_once ('./admin-header.php');
 244  ?>
 245  
 246  <div class="wrap">
 247  <?php screen_icon(); ?>
 248  <h2><?php echo esc_html( $title ); ?><?php if ( isset( $post_new_file ) ) : ?> <a href="<?php echo esc_url( $post_new_file ) ?>" class="add-new-h2"><?php echo esc_html($post_type_object->labels->add_new); ?></a><?php endif; ?></h2>
 249  <?php if ( $notice ) : ?>
 250  <div id="notice" class="error"><p><?php echo $notice ?></p></div>
 251  <?php endif; ?>
 252  <?php if ( $message ) : ?>
 253  <div id="message" class="updated"><p><?php echo $message; ?></p></div>
 254  <?php endif; ?>
 255  <form name="post" action="post.php" method="post" id="post"<?php do_action('post_edit_form_tag'); ?>>
 256  <?php wp_nonce_field($nonce_action); ?>
 257  <input type="hidden" id="user-id" name="user_ID" value="<?php echo (int) $user_ID ?>" />
 258  <input type="hidden" id="hiddenaction" name="action" value="<?php echo esc_attr( $form_action ) ?>" />
 259  <input type="hidden" id="originalaction" name="originalaction" value="<?php echo esc_attr( $form_action ) ?>" />
 260  <input type="hidden" id="post_author" name="post_author" value="<?php echo esc_attr( $post->post_author ); ?>" />
 261  <input type="hidden" id="post_type" name="post_type" value="<?php echo esc_attr( $post_type ) ?>" />
 262  <input type="hidden" id="original_post_status" name="original_post_status" value="<?php echo esc_attr( $post->post_status) ?>" />
 263  <input type="hidden" id="referredby" name="referredby" value="<?php echo esc_url(stripslashes(wp_get_referer())); ?>" />
 264  <?php if ( ! empty( $active_post_lock ) ) { ?>
 265  <input type="hidden" id="active_post_lock" value="<?php echo esc_attr( implode( ':', $active_post_lock ) ); ?>" />
 266  <?php
 267  }
 268  if ( 'draft' != $post->post_status )
 269      wp_original_referer_field(true, 'previous');
 270  
 271  echo $form_extra;
 272  
 273  wp_nonce_field( 'autosave', 'autosavenonce', false );
 274  wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
 275  wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
 276  ?>
 277  
 278  <div id="poststuff">
 279  
 280  <div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>">
 281  <div id="post-body-content">
 282  <?php if ( post_type_supports($post_type, 'title') ) { ?>
 283  <div id="titlediv">
 284  <div id="titlewrap">
 285      <label class="hide-if-no-js" style="visibility:hidden" id="title-prompt-text" for="title"><?php echo apply_filters( 'enter_title_here', __( 'Enter title here' ), $post ); ?></label>
 286      <input type="text" name="post_title" size="30" tabindex="1" value="<?php echo esc_attr( htmlspecialchars( $post->post_title ) ); ?>" id="title" autocomplete="off" />
 287  </div>
 288  <div class="inside">
 289  <?php
 290  $sample_permalink_html = $post_type_object->public ? get_sample_permalink_html($post->ID) : '';
 291  $shortlink = wp_get_shortlink($post->ID, 'post');
 292  if ( !empty($shortlink) )
 293      $sample_permalink_html .= '<input id="shortlink" type="hidden" value="' . esc_attr($shortlink) . '" /><a href="#" class="button" onclick="prompt(&#39;URL:&#39;, jQuery(\'#shortlink\').val()); return false;">' . __('Get Shortlink') . '</a>';
 294  
 295  if ( $post_type_object->public && ! ( 'pending' == $post->post_status && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { ?>
 296      <div id="edit-slug-box">
 297      <?php
 298          if ( ! empty($post->ID) && ! empty($sample_permalink_html) && 'auto-draft' != $post->post_status )
 299              echo $sample_permalink_html;
 300      ?>
 301      </div>
 302  <?php
 303  }
 304  ?>
 305  </div>
 306  <?php
 307  wp_nonce_field( 'samplepermalink', 'samplepermalinknonce', false );
 308  ?>
 309  </div>
 310  <?php } ?>
 311  
 312  <?php if ( post_type_supports($post_type, 'editor') ) { ?>
 313  <div id="postdivrich" class="postarea">
 314  
 315  <?php wp_editor($post->post_content, 'content', array('dfw' => true, 'tabindex' => 1) ); ?>
 316  
 317  <table id="post-status-info" cellspacing="0"><tbody><tr>
 318      <td id="wp-word-count"><?php printf( __( 'Word count: %s' ), '<span class="word-count">0</span>' ); ?></td>
 319      <td class="autosave-info">
 320      <span class="autosave-message">&nbsp;</span>
 321  <?php
 322      if ( 'auto-draft' != $post->post_status ) {
 323          echo '<span id="last-edit">';
 324          if ( $last_id = get_post_meta($post_ID, '_edit_last', true) ) {
 325              $last_user = get_userdata($last_id);
 326              printf(__('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified));
 327          } else {
 328              printf(__('Last edited on %1$s at %2$s'), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified));
 329          }
 330          echo '</span>';
 331      } ?>
 332      </td>
 333  </tr></tbody></table>
 334  
 335  </div>
 336  <?php } ?>
 337  </div><!-- /post-body-content -->
 338  
 339  <div id="postbox-container-1" class="postbox-container">
 340  <?php
 341  
 342  if ( 'page' == $post_type )
 343      do_action('submitpage_box');
 344  else
 345      do_action('submitpost_box');
 346  
 347  do_meta_boxes($post_type, 'side', $post);
 348  
 349  ?>
 350  </div>
 351  <div id="postbox-container-2" class="postbox-container">
 352  <?php
 353  
 354  do_meta_boxes(null, 'normal', $post);
 355  
 356  if ( 'page' == $post_type )
 357      do_action('edit_page_form');
 358  else
 359      do_action('edit_form_advanced');
 360  
 361  do_meta_boxes(null, 'advanced', $post);
 362  
 363  ?>
 364  </div>
 365  <?php
 366  
 367  do_action('dbx_post_sidebar');
 368  
 369  ?>
 370  </div><!-- /post-body -->
 371  <br class="clear" />
 372  </div><!-- /poststuff -->
 373  </form>
 374  </div>
 375  
 376  <?php
 377  if ( post_type_supports( $post_type, 'comments' ) )
 378      wp_comment_reply();
 379  ?>
 380  
 381  <?php if ((isset($post->post_title) && '' == $post->post_title) || (isset($_GET['message']) && 2 > $_GET['message'])) : ?>
 382  <script type="text/javascript">
 383  try{document.post.title.focus();}catch(e){}
 384  </script>
 385  <?php endif; ?>


Generated: Fri May 25 03:56:23 2012 Hosted by follow the white rabbit.