Skip to content

Multisite: Delete a user's content on sites set to "Delete all content." - #15885

Open
irozum wants to merge 4 commits into
WordPress:trunkfrom
irozum:fix/17905-multisite-delete-user-content
Open

irozum wants to merge 4 commits into
WordPress:trunkfrom
irozum:fix/17905-multisite-delete-user-content

Conversation

@irozum

@irozum irozum commented Nov 10, 2026

Copy link
Copy Markdown

When a network admin deletes a user and chooses "Delete all content." for a site, the content was never deleted. The handler in network/users.php removed the user from every site that wasn't set to "reassign" before calling wpmu_delete_user(). That function only deletes posts and links on sites the user still belongs to, so the user's content stayed behind, orphaned.

Changes

  • The reassignment loop in network/users.php moves into a private helper, _wpmu_reassign_deleted_users_content(). It exists only so the handler's behavior can be tested, since the handler itself ends in wp_redirect() and exit. The alternative is deleting the else branch inline.
  • The helper no longer removes the user from sites set to delete content. wpmu_delete_user() now reaches those sites and deletes the user's posts and links there.
  • The helper checks isset() on the delete[ site ][ user ] choice, which avoids an undefined-index notice when a key is missing.

Behavior note

  • Content is deleted the same way wpmu_delete_user() already does it, through wp_delete_post() without force. Posts are therefore moved to the trash when the trash is enabled, matching single-site wp_delete_user(). The trash-versus-delete question raised in the ticket is not changed here.

Tests

  • New Tests_Multisite_wpmuReassignDeletedUsersContent covers delete on every site, reassign on one site with delete on another, membership kept on delete sites, and the capability check. The first three fail without the fix.

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

Use of AI Tools

AI assistance: Yes
Tool(s): Claude Code
Model(s): Claude Sonnet 5.5
Used for: Implementation, tests, and PR description.


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 Trac Tickets.

@github-actions

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs.

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

Props irozum.

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


Props Bot commands

You can trigger Props Bot actions by commenting on this PR:

  • @propsbot add <username> to give props to a GitHub user. Requires write access.
  • @propsbot remove <username> to leave a user out of the props. Requires write access.
  • @propsbot refresh to refresh this list. Adding the props-bot label works too.

@github-actions

Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

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