While it’s simplest to use the default WP backend edit screens to create or edit pages, a custom front end form could be used. You would need form handler code that assembles the form fields in a manner compatible with wp_update_post().
]]>You could try a few of the plugins in this search, but TBH it doesn’t look very promising.
You might find starting a new WP_Query object easier to understand than altering an existing query. If nothing else, it might help in understanding “pre_get_posts”, they are both different aspects of the same thing. Code for a new query object would go on a custom page template. A WP page based on the template can be set as your “static” home page. (Displaying query results is hardly static, but that is what such pages are called in WP) By using “pre_get_posts”, you can alter the current query, so a custom template is not required.
]]>