Skip to content

REST API: Restore global $post in WP_REST_Posts_Controller::prepare_item_for_response()#11695

Open
wppoland wants to merge 1 commit intoWordPress:trunkfrom
wppoland:trac/43502
Open

REST API: Restore global $post in WP_REST_Posts_Controller::prepare_item_for_response()#11695
wppoland wants to merge 1 commit intoWordPress:trunkfrom
wppoland:trac/43502

Conversation

@wppoland
Copy link
Copy Markdown

@wppoland wppoland commented May 3, 2026

Trac ticket: https://core.trac.wordpress.org/ticket/43502

prepare_item_for_response() overwrote $GLOBALS['post'] and called setup_postdata() without restoring the previous state. Anything running after a REST request that re-used the controller (block rendering, the_content filters, etc.) saw the wrong global post.

This PR captures the previous global before mutation and restores it on every return path, including the early HEAD-request return.

Tests cover:

  • Restoration when a global post is already set
  • Restoration to null when no global post was set
  • Restoration on the HEAD-method early-return branch

Complements GH-1165 and GH-11455.


This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 3, 2026

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props motylanogha.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

…prepare_item_for_response()`.

Previously, this method overwrote `$GLOBALS['post']` and called `setup_postdata()` without restoring the previous state. Anything running after a REST request that re-used the controller (block rendering, the_content filters in subsequent calls, etc.) saw the wrong global post.

This commit captures the previous global before mutation and restores it on every return path, including the early HEAD-request return.

Adds tests covering:

* Restoration when a global post is already set.
* Restoration to `null` when no global post was set.
* Restoration on the HEAD-method early-return branch.

Complements WordPressGH-1165 and WordPressGH-11455.

See #43502.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant