По умолчанию в WordPress предусмотрена только одна страница для вывода записей. Этого достаточно только для некоторых проектов. Но существуют проекты, в которых нужно сделать несколько таких страниц. Например, на одной странице нужно выводить только новости, а на второй, пусть будет, вывод акции вашего интернет-магазина. Или вам нужно сделать блог вашей компании и показать проекты из портфолио.
Например, у вас есть рубрика news
<?php /* * @package Название вашей темы * Template Name: News **/ get_header(); $recent = new WP_Query("category_name=news"); while($recent->have_posts()) : $recent->the_post(); ?> <!-- Ваш код --> <?php endwhile; ?> <?php get_footer();
в котором category_name=news news название вашей рубрики, или напишите category_id=12, 12 – идентификатор рубрики.
Идентификатор рубрики можно быстро получить с помощью плагина Reveal ID. Вывод с помощью идентификаторов вам пригодиться, если ваши рубрики названы на русском языке.
У вас уже есть цикл. Внутри цикла разместите Вашу верстку и вывод нужных для вас данных.
<?php /* * @package Название вашей темы * Template Name: News **/ get_header(); $recent = new WP_Query("category_name=news"); while($recent->have_posts()) : $recent->the_post(); ?> <div class="card"> <?php the_title('<h2 class="news__title">', '</h2>'); ?> <div class="card-body"> <?php echo get_the_post_thumbnail(); the_excerpt(); ?> <a class="buttom buttom-primary" href="<?php echo get_permalink(); ?>">Подпробнее</a> </div> </div> <?php endwhile; get_footer();
В примере выше мы меняли наш цикл wp. В том случае у нас был только один вид записей «post», но мы можем сделать отдельный тип записей и выводить его архив.
Допустим мы решили сделать страницу с портфолио на нашем сайте с помощью произвольных типов полей. В этом нам нужно создать отдельный php файл и подключить в файле темы functions.php
// Portfolio define('TEMPL_DIR', get_template_directory()); if( file_exists( TEMPL_DIR . '/portfolio.php' )){ require_once TEMPL_DIR . '/portfolio.php'; }
В самом файле portfolio.php мы пишем следующее:
register_post_type('portfolio', array( 'labels' => array( 'name' => __('Portfolio'), 'singular_name' => __('Project'), ), 'show_ui' => true, 'show_in_menu' => true, 'public' => true, 'has_archive' => true, 'rewrite' => array( 'slug' => 'portfolio' ), ) ); // Создание нового типа записей flush_rewrite_rules(); // Обновление правил перенаправления в WP add_post_type_support( 'portfolio', array('title', 'editor', 'author', 'thumbnail', 'excerpt') ); add_filter( 'template_include', 'xakpl_template_redirect_archive' ); function xakpl_template_redirect_archive( $original_template ){ if( is_archive() && get_post_type() == 'portfolio'){ return TEMPL_DIR . '/portfolio-template.php'; // Перенаправляем страницу списка записей на наш файл. } else { return $original_template; } }
Теперь создаём новый шаблон в файле portfolio-template.php
<?php /* * @package Название вашей темы * Template Name: News **/ get_header(); while(have_posts()) : the_post(); ?> <div class="card"> <?php the_title('<h2 class="news__title">', '</h2>'); ?> <div class="card-body"> <?php echo get_the_post_thumbnail(); the_excerpt(); ?> <a class="buttom buttom-primary" href="<?php echo get_permalink(); ?>">Подпробнее</a> </div> </div> <?php endwhile; get_footer();
В отличие от прошлого способа, в этом не нужно изменять объект цикла.
Если у вас что-то не получилось, то не стесняйтесь задавать вопросы в комментариях или написать мне в VK (ссылка в футере)