97 Custom type and Advanced custom fields
1. Создание произвольной записи
Вариант 1: используем сервис для генерации: generatewp.com
Вариант 2: используем заготовку с сайта kama
add_action( 'init', 'register_post_types' );
function register_post_types(){
register_post_type('post_type_name', 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_nav_menus' => null, // зависит от public
'show_in_menu' => null, // показывать ли в меню адмнки
// 'show_in_admin_bar' => null, // зависит от show_in_menu
'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' => [ 'title', 'editor' ], // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
'taxonomies' => [],
'has_archive' => false,
'rewrite' => true,
'query_var' => true,
) );
}
Далее этот код вставляем в файл functions.php
Или создаем отдельный файл custom-type.php в который вставляем код кастомного поста. После чего в файле functions.php подключаем файл custom-type.php:
include( get_template_directory() . '/custom-type.php' );
2. Подключаем свои поля через ACF
Устанавливаем плагин ACF.
Переходим в меню «Группы полей» > Добавить новый. Именуем новую группу полей, выбираем для каких записей будут созданы поля и добавляем поля.
Заполняем поля:
После добавления всех полей нажать на кнопку «Опубликовать».
Проверяем. Переходим в создание новой записи и должны видеть кастомные поля:
3.Создаем шаблон и выводим данные из кастомных полей
Шаблон для вывода типа поста: single-name_post_type.php (single-toptovar.php)
Создаем шаблон страницы
Будем вводить все записи из кастомной категории: post-name.php (post-toptovar.php).
Добавляем в этот файл код:
<?php /* Template Name: Топ Товары */ ?>
Генерируем query запрос. Используем generatewp.com Получаем следующий код:
// WP_Query arguments
$args = array(
'post_type' => array( 'toptovar' ),
'posts_per_page' => '-1',
'order' => 'DESC',
'orderby' => 'date',
);
// The Query
$query = new WP_Query( $args );
// The Loop
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// do something
}
} else {
// no posts found
}
// Restore original Post Data
wp_reset_postdata();
Вставляем верстку внутри цикла:
<div class="toptovar-wrap">
<?php
// НАЧАЛО ЗАПРОСА WP_Query arguments
$args = array(
'post_type' => array( 'toptovar' ),
'posts_per_page' => '-1',
'order' => 'DESC',
'orderby' => 'date',
);
// The Query
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post(); ?>
<div class="toptovar-item">
<a href="<?php the_field('toptovar-url');?>" class="toptovar-img"><img src="<?php the_field('toptovar-image'); ?>" alt="" ></a>
<div class="toptovar-text">
<a href="<?php the_field('toptovar-url');?>" class="toptovar-title"><?php the_field('toptovar-name'); ?></a>
<p class="toptovar-desc"><?php the_field('toptovar-desc'); ?></p>
<p class="toptovar-price">
<?php if ( get_field('toptovar-oldprice') ) { ?>
<span><?php the_field('toptovar-oldprice'); ?>$</span>
<?php } ?>
<?php the_field('toptovar-price'); ?>$</p>
</div>
</div>
<?php }
}
wp_reset_postdata();
// КОНЕЦ ЗАПРОСА
?>
</div>






