В этой публикации возьмем готовый сниппет кода, размещенный на snipplr.com, и немного доработаем его. Этот сниппет дает возможность автоматически создавать страницу (а еще с его помощью можно автоматически создать новый пост) сразу после активации выбранной темы.
Этот сниппет я нашел на snipplr.com, но при этом не мог не заметить, что есть несколько способов доработать и улучшить его. В оригинале этот сниппет был размещен на форуме graphicriver. Если хотите, можете сразу перейти к улучшенному варианту.
Оригинальный сниппет
Здесь вы можете посмотреть, как выглядит первоначальный сниппет с комментариями.
//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% кода в старой теме.
Комментарии к записи: 5
Здравствуйте, моё имя Рейнер. Скажите есть ли способ, доработать этот сниппет, чтобы страницы создавалась после регистрации нового пользователя.
Вы можете дорабатывать этот сниппет на свое усмотрение как угодно. Что именно для этого нужно сделать — другой вопрос)
Здравствуйте! Осмелюсь задать этот самый другой вопрос. Был бы крайне признателен, если бы Вы подсказали, как это сделать.
Извините за нубский вопрос. Но куда этот код нужно вставить? Что бы он заработал.
В functions.php
https://hostenko.com/wpcafe/tutorials/kuda-vstavlyat-etot-kod-v-wordpress-obshhaya-struktura-faylov-temyi/