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

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

У наступному коді створюються 3 сторінки типу Сторінка (Page) із тайтлами "Page 1" - "Page 3" та слагами "page-1" - "page-3" відповідно.

Код потрібно вставити у файл functions.php.

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

function getPageID( $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 ( ! getPageID( $pageNames[$i] ) ) {
			// If page NOT exists
			$post_id = wp_insert_post( wp_slash( $post_data ) );
			
			if ( is_wp_error( $post_id ) ){
				echo $post_id->get_error_message();
			} else {
				//echo 'Not Errors';
				
				// тепер можна використовувати $post_id, щоб, наприклад, додати
				// довільні поля сторінки за допомогою add_post_meta() або update_post_meta()
			}
		} else {
			// Page already exists
		}
	}

});

Михайло Петров
Михайло Петров

Мене звати Михайло. Я є WordPress-розробником. Створюю сайти з "нуля", розробляю плагіни, оновлюю наявний функціонал та підтримую готові проєкти.

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

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