-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Respect fields param for global styles REST API requests. #36206
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -218,18 +218,46 @@ protected function prepare_item_for_database( $request ) { | |
public function prepare_item_for_response( $post, $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable | ||
$config = json_decode( $post->post_content, true ); | ||
$is_global_styles_user_theme_json = isset( $config['isGlobalStylesUserThemeJSON'] ) && true === $config['isGlobalStylesUserThemeJSON']; | ||
$result = array( | ||
'id' => $post->ID, | ||
'settings' => ! empty( $config['settings'] ) && $is_global_styles_user_theme_json ? $config['settings'] : new stdClass(), | ||
'styles' => ! empty( $config['styles'] ) && $is_global_styles_user_theme_json ? $config['styles'] : new stdClass(), | ||
'title' => array( | ||
'raw' => $post->post_title, | ||
'rendered' => get_the_title( $post ), | ||
), | ||
); | ||
$result = $this->add_additional_fields_to_object( $result, $request ); | ||
$response = rest_ensure_response( $result ); | ||
$links = $this->prepare_links( $post->id ); | ||
|
||
$fields = $this->get_fields_for_response( $request ); | ||
|
||
// Base fields for every post. | ||
$data = array(); | ||
|
||
if ( rest_is_field_included( 'id', $fields ) ) { | ||
$data['id'] = $post->ID; | ||
} | ||
|
||
if ( rest_is_field_included( 'title', $fields ) ) { | ||
$data['title'] = array(); | ||
} | ||
if ( rest_is_field_included( 'title.raw', $fields ) ) { | ||
$data['title']['raw'] = $post->post_title; | ||
} | ||
if ( rest_is_field_included( 'title.rendered', $fields ) ) { | ||
add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. protected style variations is not something that is meaningful for the global styles IMO, so I'd rather remove all these "protected" handling. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is how core handles protected titles. We can't do much about it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Global styles posts won't be password protected, so I'm not sure we need to handle it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Better safe than sorry? |
||
|
||
$data['title']['rendered'] = get_the_title( $post->ID ); | ||
|
||
remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) ); | ||
} | ||
|
||
if ( rest_is_field_included( 'settings', $fields ) ) { | ||
$data['settings'] = ! empty( $config['settings'] ) && $is_global_styles_user_theme_json ? $config['settings'] : new stdClass(); | ||
} | ||
|
||
if ( rest_is_field_included( 'styles', $fields ) ) { | ||
$data['styles'] = ! empty( $config['styles'] ) && $is_global_styles_user_theme_json ? $config['styles'] : new stdClass(); | ||
} | ||
|
||
$context = ! empty( $request['context'] ) ? $request['context'] : 'view'; | ||
$data = $this->add_additional_fields_to_object( $data, $request ); | ||
$data = $this->filter_response_by_context( $data, $context ); | ||
|
||
// Wrap the data in a response object. | ||
$response = rest_ensure_response( $data ); | ||
|
||
$links = $this->prepare_links( $post->ID ); | ||
$response->add_links( $links ); | ||
if ( ! empty( $links['self']['href'] ) ) { | ||
$actions = $this->get_available_actions(); | ||
|
@@ -280,6 +308,19 @@ protected function get_available_actions() { | |
return $rels; | ||
} | ||
|
||
/** | ||
* Overwrites the default protected title format. | ||
* | ||
* By default, WordPress will show password protected posts with a title of | ||
* "Protected: %s", as the REST API communicates the protected status of a post | ||
* in a machine readable format, we remove the "Protected: " prefix. | ||
* | ||
* @return string Protected title format. | ||
*/ | ||
public function protected_title_format() { | ||
return '%s'; | ||
} | ||
|
||
/** | ||
* Retrieves the query params for the global styles collection. | ||
* | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we include both raw and rendered here as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is what is happening in the line below 😄