Ensure that private posts cannot be made sticky via Quick Edit.
DRY the logic for stickies in `wp_xmlrpc_server` by introducing `->_toggle_sticky()`. Props wonderboymusic, obenland, chriscct7. Fixes #20662. git-svn-id: https://develop.svn.wordpress.org/trunk@33325 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
a22368a225
commit
e690aa50ad
@ -1567,10 +1567,12 @@ function wp_ajax_inline_save() {
|
|||||||
$data['parent_id'] = $data['post_parent'];
|
$data['parent_id'] = $data['post_parent'];
|
||||||
|
|
||||||
// Status.
|
// Status.
|
||||||
if ( isset($data['keep_private']) && 'private' == $data['keep_private'] )
|
if ( isset( $data['keep_private'] ) && 'private' == $data['keep_private'] ) {
|
||||||
|
$data['visibility'] = 'private';
|
||||||
$data['post_status'] = 'private';
|
$data['post_status'] = 'private';
|
||||||
else
|
} else {
|
||||||
$data['post_status'] = $data['_status'];
|
$data['post_status'] = $data['_status'];
|
||||||
|
}
|
||||||
|
|
||||||
if ( empty($data['comment_status']) )
|
if ( empty($data['comment_status']) )
|
||||||
$data['comment_status'] = 'closed';
|
$data['comment_status'] = 'closed';
|
||||||
|
@ -1192,6 +1192,40 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||||||
return $count > 1;
|
return $count > 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.3.0
|
||||||
|
*
|
||||||
|
* @param array $post_data
|
||||||
|
* @param bool $update
|
||||||
|
* @return void|IXR_Error
|
||||||
|
*/
|
||||||
|
private function _toggle_sticky( $post_data, $update = false ) {
|
||||||
|
$post_type = get_post_type_object( $post_data['post_type'] );
|
||||||
|
|
||||||
|
// Private and password-protected posts cannot be stickied.
|
||||||
|
if ( 'private' === $post_data['post_status'] || ! empty( $post_data['post_password'] ) ) {
|
||||||
|
// Error if the client tried to stick the post, otherwise, silently unstick.
|
||||||
|
if ( ! empty( $post_data['sticky'] ) ) {
|
||||||
|
return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $update ) {
|
||||||
|
unstick_post( $post_data['ID'] );
|
||||||
|
}
|
||||||
|
} elseif ( isset( $post_data['sticky'] ) ) {
|
||||||
|
if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
|
||||||
|
return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
$sticky = wp_validate_boolean( $post_data['sticky'] );
|
||||||
|
if ( $sticky ) {
|
||||||
|
stick_post( $post_data['ID'] );
|
||||||
|
} else {
|
||||||
|
unstick_post( $post_data['ID'] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method for wp_newPost() and wp_editPost(), containing shared logic.
|
* Helper method for wp_newPost() and wp_editPost(), containing shared logic.
|
||||||
*
|
*
|
||||||
@ -1287,20 +1321,9 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||||||
$post_ID = $post_data['ID'];
|
$post_ID = $post_data['ID'];
|
||||||
|
|
||||||
if ( $post_data['post_type'] == 'post' ) {
|
if ( $post_data['post_type'] == 'post' ) {
|
||||||
// Private and password-protected posts cannot be stickied.
|
$error = $this->_toggle_sticky( $post_data, $update );
|
||||||
if ( $post_data['post_status'] == 'private' || ! empty( $post_data['post_password'] ) ) {
|
if ( $error ) {
|
||||||
// Error if the client tried to stick the post, otherwise, silently unstick.
|
return $error;
|
||||||
if ( ! empty( $post_data['sticky'] ) )
|
|
||||||
return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
|
|
||||||
if ( $update )
|
|
||||||
unstick_post( $post_ID );
|
|
||||||
} elseif ( isset( $post_data['sticky'] ) ) {
|
|
||||||
if ( ! current_user_can( $post_type->cap->edit_others_posts ) )
|
|
||||||
return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) );
|
|
||||||
if ( $post_data['sticky'] )
|
|
||||||
stick_post( $post_ID );
|
|
||||||
else
|
|
||||||
unstick_post( $post_ID );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4902,10 +4925,12 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||||||
|
|
||||||
// Only posts can be sticky
|
// Only posts can be sticky
|
||||||
if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
|
if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
|
||||||
if ( $content_struct['sticky'] == true )
|
$data = $postdata;
|
||||||
stick_post( $post_ID );
|
$data['sticky'] = $content_struct['sticky'];
|
||||||
elseif ( $content_struct['sticky'] == false )
|
$error = $this->_toggle_sticky( $data );
|
||||||
unstick_post( $post_ID );
|
if ( $error ) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isset($content_struct['custom_fields']) )
|
if ( isset($content_struct['custom_fields']) )
|
||||||
@ -5250,10 +5275,12 @@ class wp_xmlrpc_server extends IXR_Server {
|
|||||||
|
|
||||||
// Only posts can be sticky
|
// Only posts can be sticky
|
||||||
if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
|
if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
|
||||||
if ( $content_struct['sticky'] == true )
|
$data = $newpost;
|
||||||
stick_post( $post_ID );
|
$data['sticky'] = $content_struct['sticky'];
|
||||||
elseif ( $content_struct['sticky'] == false )
|
$error = $this->_toggle_sticky( $data, true );
|
||||||
unstick_post( $post_ID );
|
if ( $error ) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isset($content_struct['custom_fields']) )
|
if ( isset($content_struct['custom_fields']) )
|
||||||
|
Loading…
Reference in New Issue
Block a user