Кастомный скелет поста Worpdress?

Добрый день. Имеется проект, где для администратора планируется добавление постов по шаблону. То есть есть конкретная верстка поста, в котором есть n-ое количество данных, требуется сделать так, чтобы человек просто вводил те или иные параметры, загружал изображения прямо со страницы добавления поста и на выходе уже готовый пост отображался на странице каталога (блога).

5cdbf445632b7112745897.jpeg

То есть человек вводил только значения для подчеркнутых полей и они добавлялись уже в готовый скилет вёрстки для поста.
Прошу камнями не кидать, с вп работал только поверхностно перечитал уйму статей на wpkarma, но так и не пришёл к итоговому значению.

Данные поля к посту я могу привязать через - например?
Может кто подсказать вразумительную статью или примерный алгоритм действий, как лучше это реализовать.
  • Вопрос задан
  • 130 просмотров
Решения вопроса 2
azerphoenix
@azerphoenix
Java Software Engineer
Приветствую!
На мой взгляд использование ACF хорошая идея, особенно, если вы не так глубоко знакомы с ВП.
Что нужно:
1) использовать тип записи "Запись" (post) или создать свой кастомный тип записи (Например, Проекты)
https://wp-kama.ru/function/register_post_type
2) создать таксономию, если она нужна вам (для категорий кастомных записей)
3) Создать шаблоны для кастомного типа записи и таксономии:
single-cpt.php
archive-cpt.php
taxonomy-tax.php
Этих будет достаточно. Обратите внимание, что "cpt" это название типа записи, а tax - это название таксономии
4) Остается установить плагин ACF (у них на оф. сайте очень классная документация и поддержка на форуме).
Дальше создаете нужные кастомные поля и назначаете их для кастомной записи, которую создали.
5) Выводите ваши кастомные поля в верстке (в вышеуказанных шаблонах). Тут вы можете выводить только те поля, которые заполнены (проверка на пустоту) и т.д.
6) остается из админки заполнить пару записей для демо и все.
Ну и само собой разумется, что верстка (html, css, js)

Другой способ - создавать кастомные поля используя Carbon Fields. Еще более простой способ использовать виз. редактор (не советую"). Суть в том, что вы создаете макет и сохраняете его, а дальше добавляете туда информацию каждый раз при создании записи.
Ответ написан
@zordq Автор вопроса
Добрый день, мною была решена поставленная задача. Благодаря azerphoenix и пробам, да ошибкам.

Что было сделано, поэтапно.
В functions.php Вашего проекта нужно зарегистрировать тип постов, который мы хотим использовать, поэтому пишем.

add_action( 'init', 'register_post_types' );
function register_post_types(){
register_post_type('имя_вашего_типа_поста', 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' => null, // зависит от public
'exclude_from_search' => null, // зависит от public
'show_ui' => null, // зависит от public
'show_in_menu' => null, // показывать ли в меню адмнки
'show_in_admin_bar' => null, // по умолчанию значение show_in_menu
'show_in_nav_menus' => null, // зависит от public
'show_in_rest' => null, // добавить в REST API. C WP 4.7
'rest_base' => null, // $post_type. C WP 4.7
'menu_position' => null,
'menu_icon' => null,
//'capability_type' => 'post',
//'capabilities' => 'post', // массив дополнительных прав для этого типа записи
//'map_meta_cap' => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
'hierarchical' => false,
'supports' => array('title','thumbnail'), // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
'taxonomies' => array(),
'has_archive' => false,
'rewrite' => true,
'query_var' => true,
) );
}


Где add_action( 'init', 'register_post_types' ); действие инициализации функции регистрации типа поста, которая и приведена выше в коде.

Далее ставим плагин для кастомных полей нашего поста.
После чего в панеле управления CMS, появляется пункт с группой наших полей. Именуем группу, добавляем поля, у которых есть ярлык - имя самой строки \ поля, и имя - которое нужно для обращения к нашей верстке.

В нашей верстке, где нужно то или иное значение или элемент из наших полей мы добавляем обращение через
<?php the_field("имя_наших_полей") ?>.

Создаем страницу с нашими постами, куда требуется вывод (каталог, например). В моем случае - это страница projects.php и в него пишем (далее идёт пример на основе моих данных, но интуитивно понятно):
<?php
/*
* Template Name: Проекты
*/
?>

<?php get_header(); ?>

<?php

/*
* Получаем все посты
* post_type - название нашего произвольного типа записей (идентификатор)
* posts_per_page - количество получаемых записей
* (в нашем случае стоит -1, это значит, что нужно получить все посты)
*/
$projects = new WP_Query(array('post_type' => 'ваш_тип_постов', 'posts_per_page' => -1));

?>

<div class="wrap">

<!— Не забудьте в цикл добавить полученный объект постов $reviews —>
<?php if ( $projects->have_posts() ) : while ( $projects->have_posts() ) : $projects->the_post(); ?>

<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="review-excerpt"><?php the_excerpt(); ?></div>
<span>Цена проекта: <?php the_field("цена_проекта") ?></span>
<span>Кол-во спален: <?php the_field('количество_спален') ?></span>

<?php endwhile; ?>
<?php endif; ?>

</div>

<?php get_footer(); ?>


После чего в админке создаем страницу с шаблоном, который создали выше. Публикуем и видим цикл наших постов, то есть все посты, которые мы "попросили" вывести на странице. Постарался обратить внимание на все детали. Буду рад вопросам и замечаниям, если кто столкнется с подобным.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы