Как добавить контент из одной страницы/записи WordPress в другую
Недавно один из наших читателей поинтересовался, существует ли способ добавить контент со страницы WordPress в другую страницу или запись. В этой статье мы покажем вам как вставить контент из одной страницы WordPress в другую запись, страницу, или любой произвольный тип записи.
Первым делом вам необходимо установить и активировать плагин Insert Pages. После активации просто переходим в раздел Записи » Добавить новую административной панели сайта для того, чтобы увидеть его в действии.
Если вы используете визуальный редактор, то заметите новую кнопку в меню под названием ‘Insert Page’.
![insertpage-button[1]](https://wpincode.com/wp-content/uploads/2014/09/insertpage-button1.png)
Клик на нее выведет всплывающее окно, где вы сможете выбрать страницу, запись, или произвольный тип записи, которые нужно добавить.
![insertpage-popup[1]](https://wpincode.com/wp-content/uploads/2014/09/insertpage-popup1.png)
Вы можете выбрать способ вставки в запись/на страницу путем нажатия на Options. По-умолчанию, вы можете добавить заголовок, контент, ссылку, или же выбрать произвольный шаблон. Подробнее о произвольных шаблонах мы расскажем далее в статье.
После выбора записи/страницы кликните на кнопку Insert Page. Плагин добавить шорткод, необходимый для вывода выбранной вами записи/страницы.
Если вы используете текстовый редактор для составления ваших записей, то шорткод можно вставить вручную. Параметры шорткода достаточно простые.
[insert page='page-slug|ID' display='title|link|content|all|custom-template.php']
Параметр page для шорткода принимает слаг страницы или ее ID. Обратите внимание, что slug можно указывать любого типа записи, не обязательно страницы.
Также можно указать ID записи. О том, как узнать ID записи в WordPress мы уже писали ранее.
[insert page='author-syed-balkhi' display='content'] [insert page='128' display='content'] [insert page='128' display='all'] [insert page='128' display='custom-author.php']
Добавляем произвольные типы записей в записи блога
Используя WordPress, вы можете добавлять любой тип контента путем создания типов записей для различных типов контента.
Плагин Insert Pages позволяет вам добавлять произвольные типы записей на страницы и записи блога. Например, вы можете создать произвольный тип записи для галереи изображений, а затем использовать Insert Pages для добавления этих галерей в ваши записи или страницы.
![gallery-post-type[1]](https://wpincode.com/wp-content/uploads/2014/09/gallery-post-type1.jpg)
Таким же образом вы можете создать произвольные типы записей для видео, портфолио, отзывов клиентов и т.д. для добавления их в записи/страницы.
Использование произвольных шаблонов для отображения вставленных страниц
Insert Pages позволяет вам вывести заголовок, ссылку, контент или все поля для вставленных страниц. Однако, некоторым пользователям может понадобиться более тонкая настройка вывода. Этого можно достичь путем использования произвольных шаблонов.
Все, что вам нужно сделать, это создать пустой php файл и загрузить его в папку с вашей темой. Файл можно назвать как угодно. Например, custom-author.php.
Этот произвольный шаблон работает точно также, как и другой файл шаблона контента в вашей теме. Ниже пример файла шаблона, который мы создали для вывода страниц автора.
Можно использовать собственные классы CSS в файле вашего шаблона, а затем применить стили в файле таблицы стилей темы. Мы использовали следующий код для оформления страницы автора.
h3.author-name < font-size:16px; >.author-thumbnail < float:left; padding:10px; >.author-bio
Вот так в итоге выглядит финальный вариант:
![author-bio[1]](https://wpincode.com/wp-content/uploads/2014/09/author-bio1.png)
Надеемся, что эта статья помогла вам добавить контент из одной страницы/записи WordPress в другую.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
Видимость записей и страниц
Вы можете изменить круг лиц, имеющих доступ к определенным материалам на конкретной странице или в конкретной записи, установив опцию Видимость в модуле «Настройки документа».
В этом руководстве
- Изменение настроек видимости
- Прикрепленные записи (только записи)
Посмотрите видеоролик с кратким обзором алгоритма работы и прочтите ниже информацию с дополнительными примерами и настройками.


- Открытая — запись будет видна всем и направлена по электронной почте вашим подписчикам.
- Личная — запись будет видна только редакторам и администраторам блога. Личные записи не отображаются в Читалке, лентах или результатах поиска. Они также не рассылаются по электронной почте вашим подписчикам.
- Защищено паролем — запись будет защищена выбранным вами паролем. Подписчики получат уведомление по электронной почте об этой записи, но увидеть ее смогут только те, у кого есть пароль.
Пароли для защищенных записей и страниц будут сохранены в виде файлов cookie. Если вы пользуетесь компьютером, находящимся в общем доступе, или не хотите, чтобы пароль сохранялся, вы можете очистить файлы cookie своего браузера.
После обновления настроек видимости своей записи или страницы не забудьте нажать кнопку Обновить или Опубликовать, чтобы изменения вступили в силу.
Дополнительные замечания
- Если вы включили опцию Подписаться на комментарии в меню «Настройки > Обсуждение», для личных и защищенных паролем записей эта опция будет отключена.
- Помните, что, если вы хотите защитить паролем большинство своих записей или вообще все и в будущем вы, возможно, захотите сделать их открытыми, вам придется обновлять каждую запись по отдельности, поскольку в настоящее время нет возможности массово редактировать группу записей, чтобы перейти от защиты паролем к открытому доступу. Вместо этого оптимальным вариантом будет сделать личным свой блог.
- Когда в содержимое защищенной паролем записи или страницы добавляется изображение или медиафайл, этот файл по-прежнему может индексироваться поисковыми системами. Посетители могут получить к нему прямой доступ без пароля.
Прикрепленные записи (только записи)
Этот раздел относится только к записям в блогах. Прикрепить страницу сайта невозможно (в том числе и страницы, на которых записи сгруппированы по категориям, авторам и дате архивирования). Однако вы можете создать ссылку на страницу сайта или добавить ее в пользовательское меню.

По умолчанию в блогах WordPress.com записи размещаются в обратном хронологическом порядке. Последняя запись находится в верхней части главной страницы. Не существует способа показывать записи в прямом хронологическом порядке, но вы можете прикрепить некоторые записи, чтобы они отображались над остальными. Они будут оставаться над другими записями, пока вы не снимите соответствующий флажок для этой записи на экране «Изменить».
Отметить запись как прикрепленную можно с помощью опции «Прикрепить к главной странице» в настройках записи.
Прикрепленные записи определенным способом выделяются в зависимости от используемой темы. Например, в некоторых темах их заголовки отображаются на цветном фоне.
Обычно опция «Прикрепить» используется только для одной-двух записей в блоге. Ее не следует использовать для каждой записи. Чтобы переместить запись обратно на свое место в хронологическом порядке, не забудьте снять для нее флажок с опции «Прикрепить».
Как сделать подстраницу для произвольного типа записей в wordpress
В этой статье расскажу, как без кучи кода сделать подстраницы у произвольного типа записей с сохранением структуры url.
Как делал раньше
Я пользовался костылём — разрывом страницы.

Недостатки такого решения:
- Url будут нечитабельными. Каждый разрыв страницы в url будет идти цифрой: /1, /2, /3. А я хочу, чтобы это были нормальные url: /logo, /process, /mobile
- Всё в одной странице. Если вы создадите таких 5−6 разрывов с кучей контента, ваша админка начнёт загибаться.
- Если же вы начнёте создавать страницы отдельно и связывать их допустим ACF — в списке страниц они могут быть далеко друг от друга.
Задача
У меня появилась задача делать подстраницы для моих кейсов на сайте. Чтобы можно было создать страницу под разный аспект проекта: дизайн сайта, дизайн приложения, логотип. Но чтобы всё было привязано к одному проекту и пользователь мог переключаться.
Выглядеть должно примерно так:

Сделать так, чтобы можно было делать подстраницы, в решении этого мне нужно:
- нормальные url, которыми я могу управлять
- разделить страницы на разные, чтобы избежать нагрузки на админку
- чтобы подстраницы были связаны с родительскими страницами в списке
Решение
Наше решение состоит из нескольких шагов
- Поменять параметры в создании произвольного типа записи
- Обновить постоянные ссылки
- Выбрать родительскую страницу у нескольких страниц
- Вывести подстраницы на родительской страницы
- Вывести подстраницы на каждой подстранице
Поменять параметры в создании произвольного типа записи
Вот так выглядит мой код создания произвольного типа записи.
register_post_type('projects', array( 'label' => null, 'labels' => array( 'name' => 'Проекты', // основное название для типа записи 'singular_name' => 'Проект', // название для одной записи этого типа 'add_new' => 'Добавить проект', // для добавления новой записи 'add_new_item' => 'Добавление проекта', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование проекта', // для редактирования типа записи 'new_item' => 'Новый проект', // текст новой записи 'view_item' => 'Смотреть проект', // для просмотра записи этого типа. 'search_items' => 'Искать проект', // для поиска по этим типам записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине // 'parent_item_colon' => '', // для родителей (у древовидных типов) 'menu_name' => 'Проекты', // название меню ), 'description' => '', 'public' => true, 'publicly_queryable' => true, // зависит от public 'exclude_from_search' => false, // зависит от public 'show_ui' => true, // зависит от public 'show_in_menu' => true, // показывать ли в меню адмнки 'show_in_admin_bar' => true, // по умолчанию значение show_in_menu 'show_in_nav_menus' => true, // зависит от public 'show_in_rest' => true, // добавить в REST API. C WP 4.7 'rest_base' => null, // $post_type. C WP 4.7 'menu_position' => 4, 'menu_icon' => 'dashicons-format-gallery', 'capability_type' => 'page', //'capabilities' => 'post', // массив дополнительных прав для этого типа записи //'map_meta_cap' => null, // Ставим true чтобы включить дефолтный обработчик специальных прав 'hierarchical' => true, 'supports' => array('title', 'thumbnail','comments', 'editor', 'page-attributes','post-formats', 'excerpt', 'revisions', 'custom-fields'), 'has_archive' => false, 'taxonomies' => array('projectcategory'), 'rewrite' => true, 'query_var' => true ) );
Для нас важны параметры:
- parent_item_colon
- show_in_rest
- rewrite
- capability_type
- hierarchical
Если у вас таких нет, скопируйте их из моего кода.
Что менять в коде:
- parent_item_colon — он должен быть либо закомментирован, либо там должно быть что-то написано. Если будет просто пустое — он не покажет блок выбора родительской страницы
- show_in_rest => true
- rewrite => true
- capability_type => true
- hierarchical => true
Обновить постоянные ссылки
В админке переходим в: «Настройки → Постоянные ссылки». И нажать кнопку « Сохранить изменения».

Выбрать родительскую страницу у нескольких страниц
Я создал тестовый проект и несколько подстраниц. У подстраниц выбрал родительскую страницу.

Вывести подстраницы на родительской странице
Теперь нам надо вывести их на родительской странице.
Будем использовать функцию get_childen , подробнее о ней можно почитать на WP Kama.
Иду в код single-project.php , у вас может быть свой шаблон детальной страницы.

У меня уже тут стоит костыль от прошлого решения. Его мы и перепишем.
Вот такой код я скопировал с WP Kama, надо в post_parent поставить айди поста и вывести ссылки в цикле.
$childrens = get_children( [ 'post_parent' => 0, // попеняем на $post->ID 'post_type' => 'any', 'numberposts' => -1, 'post_status' => 'any' ] ); if( $childrens ) < foreach( $childrens as $children )< // вывыдем ссылки >>
Вот, что у меня получилось, пришлось попотеть, чтобы учесть всё. Не забудьте заменить projects на свою таксономи.
ID); // выводим родителей страницы $parentPost = get_post($parents[0]); // выводим пост в отдельную странцу $childrens = get_children( [ ‘post_parent’ => (!empty($parents)? $parents[0] : $post->ID), // если массив родителей не пустой — ‘post_type’ => ‘projects’, // здесь вставьте свою таксономию ‘numberposts’ => -1, ‘post_status’ => ‘any’ ] ); ?> post_title;?> » >Описание ID);?>» >Описание ID);?>»>post_title;?>
Что получилось в итоге
Обратите внимание на url.
Как привязать страницу к файлу в wordpress?
Есть файл send.php, в который нужно переходить после отправки формы. Я создал новую страницу, и в файл send.php добавил этот код:
Затем выбрал этот шаблон в свойствах. Создал поле в плагине ACF, и добавил код получения записей:
Возникает ошибка в этой строке:
$posts = get_field('new_post');
Текст ошибки:
Fatal error: Uncaught Error: Call to undefined function get_field() in D:\OSPanel\domains\testwp\wp-content\themes\bets\send.php:122 Stack trace: #0 thrown in D:\OSPanel\domains\testwp\wp-content\themes\bets\send.php on line 122
Название проверил, всё правильно. Я так понимаю что я не привязал страницу или ошибся где-то, подскажите как исправить. Спасибо!