Is WordPress “publish” atomic?

It is definitely not. Publishing post is just a form submit and series of PHP function calls. When you close browser window that is treated according to PHP connection handling rules and settings. So if script terminates early the publishing process won’t be complete or rolled back to start either.

How to show or hide a post based on meta_value selection?

Use the pre_get_posts action to alter the main query with meta_query arguments to only select posts with active current_status. This example would work for your main posts page. See Conditional Tags for how to determine when other types of queries are run. function wpa_current_status( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $meta_query … Read more

How to add custom status to quick edit

Unfortunately there are no filters or actions for modifying the post status select in quick edit (WP_Posts_List_Table::inline_edit()) – you’d need to resort to JavaScript: (function($){ $( “select[name=_status]” ).each( function () { var value = $( this ).val(); if ( value === “pending” ) $( “option[value=pending]”, this ).after( “<option value=”status-1″>Status 1</option>” ); else if ( value … Read more

Authors should not publish

The role you are describing is “Contributor”. So the option would be to use this role unless you still want to edit Author capabilities which would be done as follows: function disable_authors_publish_cap() { // Get author role object $author = get_role( ‘author’ ); // Remove the post publishing capability $author->remove_cap( ‘publish_posts’ ); } add_action( ‘init’, … Read more