I’m currently working on two applications that I’m building on top of WordPress (of which I hope to share once they’re complete).
Both projects have views – basically pages with templates – that need to be created when the application is installed and the pages aren’t meant to be deleted.
Though I’ve covered how to programmatically create a post in WordPress, I thought I’d share a quick example of how you can programmatically prevent a page from being deleted in WordPress, too.
Post Statuses
In WordPress, a page is nothing more than a post type and, like all other post types, pages can have a certain status:
- Publish
- Pending
- Draft
- Auto-Draft
- Future
- Private
- Inherit
- Trash
In project, I’m programmatically creating pages so I’m setting their status to publish
, by default.
In my particular case, the rest of the statuses don’t really matter; however, your mileage may vary if you’re working with pre-existing pages or pages that users are able to edit.
Prevent a Page From Being Deleted
When pages are deleted within the WordPress Dashboard, they are actually moved to the Trash. Technically speaking, their post_status
is changed to trash
.
In order to prevent a page from being deleted, it’s a matter of updating the post_status
whenever it’s been changed.
Here are the requirements for the function listed below:
- Try to find the page.
- If it’s in the trash, change it’s status;
- Otherwise, programmatically create it.
And here we go:
/** * Programmatically creates a page with the specified title, slug, and * an optional template. Make sure that the page cannot be deleted. */ function example_create_page() { // Initialize the page ID. This indicates no action has been taken. $page_id = -1; // Example titles and slugs $title = 'My Example Page'; $slug = 'example-page'; // First, try to get the page $page = get_page_by_title( $title, OBJECT, 'page' ); // If the page doesn't exist, create it if( null == $page ) { // Create the page saving the ID $page_id = wp_insert_post( array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => 1, 'post_title' => $title, 'post_name' => $slug, 'post_status' => 'publish', 'post_type' => 'page' ) ); // Otherwise, if the page is in the trash, update its status } elseif( 'trash' == strtolower( $page->post_status ) ) { $page->post_status = 'publish'; wp_update_post( $page ); } // end if/else } // end example_create_page add_action( 'after_setup_theme', 'example_create_page' );
The comments in the code should be clear as to what it’s doing. The only other thing worth mentioning is that this function is after_setup_theme action. I’ve added it here because it’s part of the theme’s requirements.
Straight from the Codex:
This hook is called during a themes initialization. Is generally used to perform basic setup, registration, and init actions for a theme.
Again, this is a simple example and your particular use case may be a bit different, but the general principles should still apply.
Leave a Reply
You must be logged in to post a comment.