Як у 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 {
// Сторінка вже існує. Можна вивести відповідне повідомлення.
}
}
} );
🛠️ Пояснення крок за кроком
mp_get_page_id( $pageSlug ).
Ця функція:
- приймає слаг сторінки;
- виконує SQL-запит до таблиці
wp_posts; - повертає ID сторінки, якщо вона існує (або
null, якщо ні).
🔒 Безпека: перед запитом значення очищується через strip_tags() і addslashes().
add_action( 'init', function() {...} ).
Код запускається на хуку init — один із перших моментів, коли можна безпечно працювати із постами WordPress.
- Масиви
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.
- Створення посту через
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.
🔚 Висновки
Автоматичне створення сторінок — зручний інструмент для розробників. Це дозволяє:
- прискорити розгортання сайту;
- уникнути помилок ручного створення;
- підготувати сайт до використання без зайвих кліків в адмінці.
