WordPress/wp-admin/post.php

354 lines
9.4 KiB
PHP
Raw Normal View History

<?php
/**
* Edit post administration panel.
*
* Manage Post actions: post, edit, delete, etc.
*
* @package WordPress
* @subpackage Administration
*/
/** WordPress Administration Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
$parent_file = 'edit.php';
$submenu_file = 'edit.php';
wp_reset_vars( array( 'action' ) );
if ( isset( $_GET['post'] ) && isset( $_POST['post_ID'] ) && (int) $_GET['post'] !== (int) $_POST['post_ID'] ) {
wp_die( __( 'A post ID mismatch has been detected.' ), __( 'Sorry, you are not allowed to edit this item.' ), 400 );
} elseif ( isset( $_GET['post'] ) ) {
$post_id = (int) $_GET['post'];
} elseif ( isset( $_POST['post_ID'] ) ) {
$post_id = (int) $_POST['post_ID'];
} else {
$post_id = 0;
}
$post_ID = $post_id;
/**
* @global string $post_type
* @global object $post_type_object
* @global WP_Post $post Global post object.
*/
global $post_type, $post_type_object, $post;
if ( $post_id ) {
$post = get_post( $post_id );
}
if ( $post ) {
$post_type = $post->post_type;
$post_type_object = get_post_type_object( $post_type );
}
if ( isset( $_POST['post_type'] ) && $post && $post_type !== $_POST['post_type'] ) {
wp_die( __( 'A post type mismatch has been detected.' ), __( 'Sorry, you are not allowed to edit this item.' ), 400 );
}
if ( isset( $_POST['deletepost'] ) ) {
$action = 'delete';
} elseif ( isset( $_POST['wp-preview'] ) && 'dopreview' == $_POST['wp-preview'] ) {
$action = 'preview';
}
$sendback = wp_get_referer();
if ( ! $sendback ||
strpos( $sendback, 'post.php' ) !== false ||
strpos( $sendback, 'post-new.php' ) !== false ) {
if ( 'attachment' == $post_type ) {
$sendback = admin_url( 'upload.php' );
} else {
$sendback = admin_url( 'edit.php' );
if ( ! empty( $post_type ) ) {
$sendback = add_query_arg( 'post_type', $post_type, $sendback );
}
}
} else {
$sendback = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'ids' ), $sendback );
}
switch ( $action ) {
case 'post-quickdraft-save':
// Check nonce and capabilities
$nonce = $_REQUEST['_wpnonce'];
$error_msg = false;
// For output of the quickdraft dashboard widget
require_once ABSPATH . 'wp-admin/includes/dashboard.php';
if ( ! wp_verify_nonce( $nonce, 'add-post' ) ) {
$error_msg = __( 'Unable to submit this form, please refresh and try again.' );
}
if ( ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) {
exit;
}
if ( $error_msg ) {
return wp_dashboard_quick_press( $error_msg );
}
$post = get_post( $_REQUEST['post_ID'] );
check_admin_referer( 'add-' . $post->post_type );
$_POST['comment_status'] = get_default_comment_status( $post->post_type );
$_POST['ping_status'] = get_default_comment_status( $post->post_type, 'pingback' );
edit_post();
wp_dashboard_quick_press();
exit;
case 'postajaxpost':
case 'post':
check_admin_referer( 'add-' . $post_type );
$post_id = 'postajaxpost' == $action ? edit_post() : write_post();
redirect_post( $post_id );
exit();
case 'edit':
$editing = true;
if ( empty( $post_id ) ) {
wp_redirect( admin_url( 'post.php' ) );
exit();
}
if ( ! $post ) {
wp_die( __( 'You attempted to edit an item that doesn&#8217;t exist. Perhaps it was deleted?' ) );
}
if ( ! $post_type_object ) {
wp_die( __( 'Invalid post type.' ) );
}
if ( ! in_array( $typenow, get_post_types( array( 'show_ui' => true ) ) ) ) {
wp_die( __( 'Sorry, you are not allowed to edit posts in this post type.' ) );
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
wp_die( __( 'Sorry, you are not allowed to edit this item.' ) );
}
if ( 'trash' == $post->post_status ) {
wp_die( __( 'You can&#8217;t edit this item because it is in the Trash. Please restore it and try again.' ) );
}
if ( ! empty( $_GET['get-post-lock'] ) ) {
check_admin_referer( 'lock-post_' . $post_id );
wp_set_post_lock( $post_id );
wp_redirect( get_edit_post_link( $post_id, 'url' ) );
exit();
}
$post_type = $post->post_type;
if ( 'post' == $post_type ) {
$parent_file = 'edit.php';
$submenu_file = 'edit.php';
$post_new_file = 'post-new.php';
} elseif ( 'attachment' == $post_type ) {
$parent_file = 'upload.php';
$submenu_file = 'upload.php';
$post_new_file = 'media-new.php';
} else {
if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) {
$parent_file = $post_type_object->show_in_menu;
} else {
$parent_file = "edit.php?post_type=$post_type";
}
$submenu_file = "edit.php?post_type=$post_type";
$post_new_file = "post-new.php?post_type=$post_type";
}
$title = $post_type_object->labels->edit_item;
/**
* Allows replacement of the editor.
*
* @since 4.9.0
*
* @param boolean Whether to replace the editor. Default false.
* @param object $post Post object.
*/
if ( apply_filters( 'replace_editor', false, $post ) === true ) {
break;
}
Editor: Merge some minor bug fixes. There were some tweaks made to the post editor in WordPress 5.0 that hadn't been merged to `trunk`, this commit rectifies that. Merges [43815,43816] from the 5.0 branch to trunk. Props birgire, jorbin, abdullahramzan, adamsilverstein, mrahmadawais, airathalitov, ajitbohra, schlessera, albertomedina, aldavigdis, alexsanford1, xyfi, nitrajka, afercia, andreiglingeanu, euthelup, aduth, sumobi, anevins, azaozz, androb, andrewserong, kallehauge, nosolosw, apeatling, atimmer, arnaudban, asvinballoo, b-07, benlk, blowery, caxco93, benjamin_zekavica, kau-boy, bernhard-reiter, bcolumbia, bph, boblinthorst, bradyvercher, bpayton, brentswisher, bronsonquick, burhandodhy, icaleb, chouby, ehg, chrisvanpatten, butimnoexpert, christophherr, chriskmnds, claudiosanches, danielbachhuber, mrmadhat, danielhw, danieltj, goldsounds, dfangstrom, daniloercoli, dannycooper, nerrad, dsawardekar, davemoran118, davidherrera, dryanpress, davidsword, davisshaver, dmsnell, dlocc, diegoreymendez, dd32, dency, ocean90, donnapep, chopinbach, electricfeet, eliorivero, sewmyheadon, ericnmurphy, foobar4u, circlecube, fabs_pim, flixos90, floriansimeth, gma992, garrett-eclipse, garyj, pento, doomwaxer, revgeorge, gziolo, bordoni, hardeepasrani, helen, luehrsen, herbmiller, toro_unit, ianbelanger, iandunn, igorsch, ipstenu, ireneyoast, israelshmueli, sisanu, jd55, copons, jnylen0, jamestryon, ephoxjames, jamiehalvorson, jsnajdr, jagnew, dciso, octalmage, vengisss, jhoffm34, shenkj, audrasjb, jblz, jeremyfelt, motleydev, jipmoors, sephsekla, joemaller, joemcgill, joen, johndyer, johnjamesjacoby, joshuawold, johnny5, desrosj, jonsurrell, belcherj, sirjonathan, koke, jorgefilipecosta, shelob9, jvisick77, julienmelissas, kopepasah, kadamwhite, codebykat, ryelle, gwwar, kevinwhoffman, coderkevin, ixkaito, kjellr, obenland, lancewillett, postphotos, loicblascos, lucasstark, luigipulcini, lucaskowalski, lukepettway, mahdiyazdani, mahmoudsaeed, mkaz, tyxla, markjaquith, mapk, vindl, m-e-h, mboynes, mattheu, lonelyvegan, mtias, napy84, maurobringolf, maximebj, mayukojpn, woodent, michaelhull, mmtr86, stubgo, simison, mihai2u, mike-haydon-swo, mnelson4, mpheasant, mikeschroder, idpokute, mikeyarce, dimadin, gonzomir, milesdelliott, warmarks, munirkamal, nfmohit, nateconley, greatislander, njpanderson, notnownikki, nielslange, nikschavan, potbot, nshki, webmandesign, oskosk, pglewis, pareshradadiya-1, swissspidy, pbearne, pauldechov, psealock, paulstonier, paulwilde, pedromendonca, ptasker, peterwilsoncc, tyrannous, strategio, piersb, delawski, prtksxna, presskopp, rachelbaker, rachelmcr, rakshans1, rahmon, lamosty, youknowriad, riddhiehta02, noisysocks, deviodigital, sanchothefat, robertsky, _dorsvenabili, rohittm, magicroundabout, rmccue, welcher, ryo511, sagarprajapati, samikeijonen, scottmweaver, kluny, sharaz, giventofly76, designsimply, sstoqnov, hypest, netweb, stevehenty, stuartfeldt, sergioestevao, soean, tammie_l, karmatosed, thrijith, timgardner, timmydcrawford, tjnowell, mirucon, travislopes, truongwp, tjfunke001, vishalkakadiya, vtrpldn, walterebert, westonruter, skorasaurus, somtijds, earnjam, williampatton, willybahuaud, yoavf, zebulan, ziyaddin, abhijitrakas, andreamiddleton, csabotta, dixitadusara, etoledom, faishal, hideokamoto, imath, iseulde, j-falk, jaswrks, johnwatkins0, jomurgel, notlaura, leahkoerper, mcsf, meetjey, 0mirka00, mitogh, ephoxmogran, tacrapo, mzorz, nagayama, omarreiss, ramonopoly, rileybrook, tinkerbelly, shaileesheth, sikander, ssousa, tfrommen, yahil. Fixes #45037. Built from https://develop.svn.wordpress.org/trunk@44165 git-svn-id: http://core.svn.wordpress.org/trunk@43995 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-12-14 06:12:52 +01:00
if ( use_block_editor_for_post( $post ) ) {
include( ABSPATH . 'wp-admin/edit-form-blocks.php' );
break;
}
if ( ! wp_check_post_lock( $post->ID ) ) {
$active_post_lock = wp_set_post_lock( $post->ID );
if ( 'attachment' !== $post_type ) {
wp_enqueue_script( 'autosave' );
}
}
$post = get_post( $post_id, OBJECT, 'edit' );
if ( post_type_supports( $post_type, 'comments' ) ) {
wp_enqueue_script( 'admin-comments' );
enqueue_comment_hotkeys_js();
}
include( ABSPATH . 'wp-admin/edit-form-advanced.php' );
break;
case 'editattachment':
check_admin_referer( 'update-post_' . $post_id );
// Don't let these be changed
unset( $_POST['guid'] );
$_POST['post_type'] = 'attachment';
// Update the thumbnail filename
$newmeta = wp_get_attachment_metadata( $post_id, true );
$newmeta['thumb'] = wp_basename( $_POST['thumb'] );
wp_update_attachment_metadata( $post_id, $newmeta );
// Intentional fall-through to trigger the edit_post() call.
case 'editpost':
check_admin_referer( 'update-post_' . $post_id );
$post_id = edit_post();
// Session cookie flag that the post was saved
if ( isset( $_COOKIE['wp-saving-post'] ) && $_COOKIE['wp-saving-post'] === $post_id . '-check' ) {
setcookie( 'wp-saving-post', $post_id . '-saved', time() + DAY_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl() );
}
redirect_post( $post_id ); // Send user on their way while we keep working
exit();
case 'trash':
check_admin_referer( 'trash-post_' . $post_id );
if ( ! $post ) {
wp_die( __( 'The item you are trying to move to the Trash no longer exists.' ) );
}
if ( ! $post_type_object ) {
wp_die( __( 'Invalid post type.' ) );
}
if ( ! current_user_can( 'delete_post', $post_id ) ) {
wp_die( __( 'Sorry, you are not allowed to move this item to the Trash.' ) );
}
$user_id = wp_check_post_lock( $post_id );
if ( $user_id ) {
$user = get_userdata( $user_id );
/* translators: %s: User's display name. */
wp_die( sprintf( __( 'You cannot move this item to the Trash. %s is currently editing.' ), $user->display_name ) );
}
if ( ! wp_trash_post( $post_id ) ) {
wp_die( __( 'Error in moving to Trash.' ) );
}
wp_redirect(
add_query_arg(
array(
'trashed' => 1,
'ids' => $post_id,
),
$sendback
)
);
exit();
case 'untrash':
check_admin_referer( 'untrash-post_' . $post_id );
if ( ! $post ) {
wp_die( __( 'The item you are trying to restore from the Trash no longer exists.' ) );
}
if ( ! $post_type_object ) {
wp_die( __( 'Invalid post type.' ) );
}
if ( ! current_user_can( 'delete_post', $post_id ) ) {
wp_die( __( 'Sorry, you are not allowed to restore this item from the Trash.' ) );
}
if ( ! wp_untrash_post( $post_id ) ) {
wp_die( __( 'Error in restoring from Trash.' ) );
}
wp_redirect( add_query_arg( 'untrashed', 1, $sendback ) );
exit();
case 'delete':
check_admin_referer( 'delete-post_' . $post_id );
if ( ! $post ) {
wp_die( __( 'This item has already been deleted.' ) );
}
if ( ! $post_type_object ) {
wp_die( __( 'Invalid post type.' ) );
}
if ( ! current_user_can( 'delete_post', $post_id ) ) {
wp_die( __( 'Sorry, you are not allowed to delete this item.' ) );
}
if ( $post->post_type == 'attachment' ) {
$force = ( ! MEDIA_TRASH );
if ( ! wp_delete_attachment( $post_id, $force ) ) {
wp_die( __( 'Error in deleting.' ) );
}
} else {
if ( ! wp_delete_post( $post_id, true ) ) {
wp_die( __( 'Error in deleting.' ) );
}
}
wp_redirect( add_query_arg( 'deleted', 1, $sendback ) );
exit();
case 'preview':
check_admin_referer( 'update-post_' . $post_id );
$url = post_preview();
wp_redirect( $url );
exit();
case 'toggle-custom-fields':
check_admin_referer( 'toggle-custom-fields' );
$current_user_id = get_current_user_id();
if ( $current_user_id ) {
$enable_custom_fields = (bool) get_user_meta( $current_user_id, 'enable_custom_fields', true );
update_user_meta( $current_user_id, 'enable_custom_fields', ! $enable_custom_fields );
}
wp_safe_redirect( wp_get_referer() );
exit();
default:
/**
* Fires for a given custom post action request.
*
* The dynamic portion of the hook name, `$action`, refers to the custom post action.
*
* @since 4.6.0
*
* @param int $post_id Post ID sent with the request.
*/
do_action( "post_action_{$action}", $post_id );
wp_redirect( admin_url( 'edit.php' ) );
exit();
} // end switch
include( ABSPATH . 'wp-admin/admin-footer.php' );