John Davidson

php - Create a Page on plugin activation if the post_title does not exist


I have a WordPress plugin that is creating pages on activation, but I only want it to create the pages if they don't already exist (don't want duplicates if the plugin has been re-activated).

function create_pages() {
if ( ! current_user_can( 'activate_plugins' ) ) return;

$pages = array(
// Donations
'post_title' => 'Donations',
'post_content' => 'Give us all your money!',
// Cart
'post_title' => 'Cart',
'post_content' => 'Buy!',

foreach($pages as $page) {
if(get_page_by_title($page['post_title']) === null):
$new_post = array(
'post_title' => $page['post_title'],
'post_content' => $page['post_content'],
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'page',
$post_id = wp_insert_post($new_post);
register_activation_hook(__FILE__, 'create_pages');

When I run this, no pages are created and it seems to be caused by the if(get_page_by_title($page['post_title']) === null): line. If I leave that conditional out, it creates the pages needed - but also recreates them on reactivation.

Is there anything glaring I'm missing? Any help is greatly appreciated.


My Answer:
You can achieve this by checking if the post title already exists before creating a new page. Here's an example code snippet that you can use in your plugin file:

register_activation_hook( __FILE__, 'create_page_on_activation' );

function create_page_on_activation() {
$page_title = 'Your Page Title';
$page_content = 'Your Page Content';
$page_check = get_page_by_title( $page_title );

if( empty( $page_check ) ) {
$page = array(
'post_title' => $page_title,
'post_content' => $page_content,
'post_status' => 'publish',
'post_type' => 'page'

wp_insert_post( $page );

In this code snippet, we first define the page title and content that you want to create. We then use the `get_page_by_title` function to check if a page with the specified title already exists. If the page does not exist (`$page_check` is empty), we create a new page using the `wp_insert_post` function.

Make sure to replace `'Your Page Title'` and `'Your Page Content'` with your actual page title and content. You can add this code to your plugin file to create a new page only if it does not already exist.

Rate this post

3 of 5 based on 5041 votes


© 2024 - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us