Skip to content

Conversation

kean
Copy link
Contributor

@kean kean commented Oct 10, 2025

Description

One of the defining characteristics of WordPress is the set of statuses for posts and how you can easily move a post from one state to another. This PR introduces a new "Status" field to "Post Settings" to match the web.

Screenshot 2025-10-10 at 2 33 24 PM

This feature was made possible thanks to the streamlined publishing introduced in 24.9, the new SwiftUI-based "Post Settings" that uses a plain struct to represent settings added in 26.0, and further improvements made to it in 26.4 with a new publishing flow based on "Post Settings".

Changes

  • Add "Status" field to the "Post Settings" screen, which provides a simple and easily discoverable way to move posts from one state to another. For example, it's now much easier to find how to move "Pending" post to a "Scheduled" state, etc.
  • Add "Publish Date" back to "Post Settings":for draft and pending posts. This allows you to pre-select the publish date without actually scheduling the post. This enables the scenarios like "an author creates a post with a scheduled date and submits it for a a review". It also fixes a long-standing issues like Scheduling options no longer available Jetpack iOS #23300 – there are now multiple easily discoverable and intuitive ways to schedule a post.
  • Addresses https://linear.app/a8c/issue/CMM-809/button-done-disappears-when-you-enter-a-password-for-post by showing the "Enter Password" field as a modal sheet and by using UIKit to switch to a "secure" mode so that it doesn't lose state. Note: I will integrate the new modal in the "Visibility" row in the "Publishing" sheet in the upcoming PR.
  • Use "Menlo" font for the password field to make it easier to distinguish between characters like 0 and 0

Technical Notes

The changes are mainly only in the UI. The only exception is that we also finally consolidated "publishing" and "saving" a post, so there is now a single method in PostCoordinator that syncs all the latest changes to the server (using the existing delta-update mechanism) and notifies the app.

Screenshots

Screenshot 2025-10-10 at 1 54 03 PM Screenshot 2025-10-10 at 1 54 07 PM

User Scenarios

1. Scheduling a password-protected post

schedule.mov

2. Returning a published post back in review

return-to-review.mov

Testing Instructions

I would suggest focusing on the following two scenarios:

  • Scheduling posts as it's traditionally been buggy
  • Sending password protected posts as it's important it works

It may be worth making sure that none of the bugs previously fixed in 24.9 are reintroduces. Release notes from 24.9:

@kean kean changed the title Task/status row Add "Status" row to "Post Settings" Oct 10, 2025
@dangermattic
Copy link
Collaborator

dangermattic commented Oct 10, 2025

1 Warning
⚠️ This PR is larger than 500 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.

Generated by 🚫 Danger

@wpmobilebot
Copy link
Contributor

wpmobilebot commented Oct 10, 2025

App Icon📲 You can test the changes from this Pull Request in Jetpack by scanning the QR code below to install the corresponding build.
App NameJetpack
ConfigurationRelease-Alpha
Build Number29471
VersionPR #24939
Bundle IDcom.jetpack.alpha
Commitba92c56
Installation URL6ufhls30caf6o
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot
Copy link
Contributor

wpmobilebot commented Oct 10, 2025

App Icon📲 You can test the changes from this Pull Request in WordPress by scanning the QR code below to install the corresponding build.
App NameWordPress
ConfigurationRelease-Alpha
Build Number29471
VersionPR #24939
Bundle IDorg.wordpress.alpha
Commitba92c56
Installation URL69n647aktqlq0
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@kean kean added this to the 26.5 milestone Oct 10, 2025
authorRow
if !viewModel.isDraftOrPending || viewModel.context == .publishing {
publishDateRow
visibilityRow
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The visilbilityRow is displayed at the top of the screen in the "Publishing" sheet (matches the web).

let settings = getSettingsToSave(for: self.settings)
let coordinator = PostCoordinator.shared
if coordinator.isSyncAllowed(for: post) {
if coordinator.isSyncAllowed(for: post) && post.status == settings.status {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you try to change the status of a post, it will be performed as a synchronous operation (showing a spinner until succeeds).

Copy link

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants