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>