How To Prevent a Page From Being Deleted in WordPress

If you're experienced with programmatically creating pages, you may wish to skip down to the code.

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.

1 Reply to “How To Prevent a Page From Being Deleted in WordPress”

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.