Як у WordPress автоматично створити сторінку

Привіт:) У цьому пості покажу, як автоматично створювати сторінки на сайті WordPress — наприклад, під час активації теми або запуску нового проєкту. Такий підхід часто використовується:

  • при розробці тем або плагінів;
  • коли потрібно створити сторінки на тип зразок "Про нас", "Політика конфіденційності", "Оплата і доставка" тощо;
  • для генерації службових сторінок, які будуть використовувати кастомні шаблони.

🧩 Як це працює?

У WordPress сторінки створюються як записи типу page, які можна створити вручну або автоматично через функцію wp_insert_post().

У наведеному коді:

  • створюється 3 сторінки з назвами Page 1, Page 2 та Page 3;
  • задається їхній слаг — тобто URL-частина;
  • перевіряється, чи сторінка вже існує (щоб уникнути дублювання);
  • у разі відсутності — вона створюється з базовими параметрами.

📄 Код

Вставте цей код у functions.php активної теми. Якщо потрібно запускати його лише раз (наприклад, при активації теми), варто обгорнути в окрему перевірку, яку я додав нижче.

/** 
 * Auto Create Pages 
 * 
 * https://developer.wordpress.org/reference/functions/wp_insert_post/
 * https://wp-kama.ru/function/wp_insert_post
 * 
*/

if ( ! function_exists( 'mp_get_page_id' ) ) {
    function mp_get_page_id( $pageSlug ) {
	    global $wpdb;
	    
        $pageSlug = strip_tags( $pageSlug );
	    $pageSlug = addslashes( $pageSlug );
	    $pageNameId = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_name ='".$pageSlug."'" );
	    
        return $pageNameId;
    }
}

add_action( 'init', function() {
	$pageTitles = array ( 'Page 1', 'Page 2', 'Page 3' );
	$pageNames  = array ( 'page-1', 'page-2', 'page-3' );

	for ( $i = 0; $i < count( $pageNames ); $i++ ) {
		
		$post_data = array(
			'post_title'     => sanitize_text_field( $pageTitles[$i] ), // title
			'post_name'      => $pageNames[$i],  // slug
			'post_type'      => 'page',
			'post_status'    => 'publish',
			'post_author'    => 1,
			'comment_status' => 'closed',
		);

		if ( ! mp_get_page_id( $pageNames[$i] ) ) {
            // Якщо сторінки нема
			$post_id = wp_insert_post( wp_slash( $post_data ) );
			
			if ( is_wp_error( $post_id ) ){
				echo $post_id->get_error_message();
			} else {
				// Помилки відсутні
				
				// тепер можна використовувати $post_id, щоб, наприклад, додати
				// довільні поля сторінки за допомогою add_post_meta() або update_post_meta()
			}
		} else {
			// Сторінка вже існує. Можна вивести відповідне повідомлення.
		}
	}

} );

🛠️ Пояснення крок за кроком

  1. mp_get_page_id( $pageSlug ).

Ця функція:

  • приймає слаг сторінки;
  • виконує SQL-запит до таблиці wp_posts;
  • повертає ID сторінки, якщо вона існує (або null, якщо ні).

🔒 Безпека: перед запитом значення очищується через strip_tags() і addslashes().

  1. add_action( 'init', function() {...} ).

Код запускається на хуку init — один із перших моментів, коли можна безпечно працювати із постами WordPress.

  1. Масиви pageTitles та pageNames.

Це дві зв’язані змінні:

$pageTitles = array ( 'Page 1', 'Page 2', 'Page 3' );
$pageNames = array ( 'page-1', 'page-2', 'page-3' );
  • pageTitles — те, що побачить користувач у заголовку сторінки;
  • pageNames — слаги (адреса сторінки), використовуються у URL, наприклад, https://site.com/page-1.
  1. Створення посту через wp_insert_post().
$post_data = array(
	'post_title'     => ..., // назва сторінки
	'post_name'      => ..., // слаг (url)
	'post_type'      => 'page', // тип — Сторінка
	'post_status'    => 'publish', // одразу публікується
	'post_author'    => 1, // ID автора
	'comment_status' => 'closed', // коментарі вимкнено
);
  • Якщо сторінка з таким слагом вже існує — нова не створюється.
  • Якщо не існує — створюється і віддає ID новоствореної сторінки.
  • У разі помилки можна вивести її через get_error_message().

📌 Як зробити так, щоб код виконався лише раз?

Щоб сторінки не перевірялись на кожному init, можна додати прапорець:

if ( ! get_option( 'my_custom_pages_created' ) ) {
// код створення сторінок
add_option( 'my_custom_pages_created', true );
}

Або зробити функцію, що запускається при активації теми:

add_action( 'after_switch_theme', 'mp_create_pages_once' );
function mp_create_pages_once() {
// створення сторінок
}

🧪 Що ще можна зробити після створення?

Після створення сторінки за допомогою $post_id можна:

  • додати мета-поля:
    add_post_meta( $post_id, '_my_key', 'value' );
  • призначити шаблон сторінки:
    update_post_meta( $post_id, '_wp_page_template', 'my-template.php' );
  • задати батьківську сторінку через параметр post_parent.

🔚 Висновки

Автоматичне створення сторінок — зручний інструмент для розробників. Це дозволяє:

  • прискорити розгортання сайту;
  • уникнути помилок ручного створення;
  • підготувати сайт до використання без зайвих кліків в адмінці.
Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *