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.