Больше результатов...

Generic selectors
Только точные совпадения
Искать в заголовках
Искать в контенте
Post Type Selectors
Filter by Categories
FAQ
Hostenko
Вдохновение
Видеоуроки
Новости
Плагины
Темы
Уроки
Хаки

В этой публикации возьмем готовый сниппет кода, размещенный на snipplr.com, и немного доработаем его. Этот сниппет дает возможность автоматически создавать страницу (а еще с его помощью можно автоматически создать новый пост) сразу после активации выбранной темы.

Этот сниппет я нашел на snipplr.com, но при этом не мог не заметить, что есть несколько способов доработать и улучшить его. В оригинале этот сниппет был размещен на форуме graphicriver. Если хотите, можете сразу перейти к улучшенному варианту.

inet.ws - Powerful VPS Hosting in the USA, Canada, UK and DE!

Оригинальный сниппет

Здесь вы можете посмотреть, как выглядит первоначальный сниппет с комментариями.

//Get data for page with the title of the new post.
//We'll later use this to check if it already exists, if it does we won't create it.
$page_check = get_page_by_title('Sermon Media');
$page_check_id = $page_check->ID;

//Declaring the data for our new page
$new_page = array(
	'post_type' => 'page',
	'post_title' => 'Sermon Media',
	'post_status' => 'publish',
	'post_author' => 1,
);

//If the page doesn't already exist create it
if(!isset($page_check_id)){
	wp_insert_post($new_page);
	//getting the data of our new page and assigning a page template for it.
	//If you're not going to use a custom template remove the next 3 lines
	$new_page_data = get_page_by_title('Sermon Media');
	$new_page_id = $new_page_data->ID;
	update_post_meta($new_page_id, '_wp_page_template','page-template.php');
}

Доработки

Я нашел несколько способов улучшить код, некоторые правки незначительны, а другие - существенно важны. Итак, начнем.

Ненужные обращения к БД

Вот это — важное улучшение. В своем текущем виде каждый раз с загрузкой страницы сниппет выполняет функцию get_page_by_title(). В этом совершенно нет никакой необходимости, т.к. выполнение всего сниппета нам нужно лишь после того, как мы активировали тему. К счастью, эту проблему легко решить. Вот что надо изменить:

if (isset($_GET['activated']) && is_admin()){
    //the theme has just been activated, coding goes here
}

Заголовок нужен трижды

Это важная правка. Как вы видите, заголовок страницы используется трижды (строки 3, 9 и 19). Велик шанс того, что вы пропустите его и тем самым создадите проблему (даже тот, кто размещал этот сниппет на сайте snipplr, забыл последний раз добавить код, и у него осталось вместо заголовка словосочетание "Post Title").

Шаблон страницы: первая проблема

После добавления сниппета есть еще три строки, которые добавляют шаблон страницы к ново созданной странице сайта. А что, если вы не хотите назначать новой странице какой-то конкретный шаблон? На мой взгляд, лучше оставить во главе переменную, которая по умолчанию будет пустой. Если захотите, то туда вы сами сможете вписать имя нужной вам темы оформления.

Шаблон страницы: вторая проблема

Функция wp_insert_post() дает значение id страницы, и нет необходимости использовать особую функцию, чтобы получить что-то, что у нас уже и так есть. Поэтому просто вместо wp_insert_post() стоит вписать $new_page_id = wp_insert_post(). Тогда мы сможем удалить следующие 2 строки.

Финальный вид сниппета после редактирования

if (isset($_GET['activated']) && is_admin()){

	$new_page_title = 'This is the page title';
	$new_page_content = 'This is the page content';
	$new_page_template = ''; //ex. template-custom.php. Leave blank if you don't want a custom page template.

	//don't change the code bellow, unless you know what you're doing

	$page_check = get_page_by_title($new_page_title);
	$new_page = array(
		'post_type' => 'page',
		'post_title' => $new_page_title,
		'post_content' => $new_page_content,
		'post_status' => 'publish',
		'post_author' => 1,
	);
	if(!isset($page_check->ID)){
		$new_page_id = wp_insert_post($new_page);
		if(!empty($new_page_template)){
			update_post_meta($new_page_id, '_wp_page_template', $new_page_template);
		}
	}

}

Не говорю, что автор оригинального кода плохо справился со своей задачей. Мы все создаем какой-то код, который всегда можно улучшить, порой даже не хочется смотреть на тот код, который в твоей собственной теме получается. И порой ты начинаешь работу над новым кодом для темы просто потому, что не хочется тратить время на переписывание 90% кода в старой теме.

Источник: WPCanyon.com
inet.ws - Powerful VPS Hosting in the USA, Canada, UK and DE!
Алексей Шевченко
редактор wpcafe
Изучает сайтостроение с 2008 года. Практикующий вебмастер, специализирующий на создание сайтов на WordPress. Задать вопрос Алексею можно на https://profiles.wordpress.org/wpthemeus/

Комментарии к записи: 5

Reyner:

Здравствуйте, моё имя Рейнер. Скажите есть ли способ, доработать этот сниппет, чтобы страницы создавалась после регистрации нового пользователя.

WPcafe.org:

Вы можете дорабатывать этот сниппет на свое усмотрение как угодно. Что именно для этого нужно сделать — другой вопрос)

Алексей:

Здравствуйте! Осмелюсь задать этот самый другой вопрос. Был бы крайне признателен, если бы Вы подсказали, как это сделать.

Владимир:

Извините за нубский вопрос. Но куда этот код нужно вставить? Что бы он заработал.

WPcafe.org:

В functions.php

https://hostenko.com/wpcafe/tutorials/kuda-vstavlyat-etot-kod-v-wordpress-obshhaya-struktura-faylov-temyi/

Добавить комментарий