Выводим список всех категорий со списком записей
На одном из сайтов необходимо было вывести на Главной странице блоками категории, а внутри записи из этих категорий.
Нашел такой вполне рабочий код здесь:
<?php $cats = get_categories(); // Получаем список всех категорий foreach ($cats as $cat) { echo "<h3>".$cat->cat_name."</h3>"; // Получаем название одной категории echo "<ul class='uldotted'>"; query_posts('posts_per_page=-1&cat='.$cat->cat_ID); // изменяем параметры основного цикла WordPress и затем выводим посты while(have_posts()) { the_post(); $category = get_the_category(); // получаем список категорий для одного поста if ($category[0]->cat_ID == $cat->cat_ID) { // Сравниваем список всех категорий с ID первой категории этого поста, и если совпадает, то выводим ссылку на пост только один раз, даже если он указан в нескольких категориях echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; } } echo "</ul>"; } ?>
Переделав его под свой шаблон, получил такой формат:
<div class="home-wrap"> <?php $cats = get_categories(); // get list of categories foreach ($cats as $cat) { ?> <div class='cat-block'> <div class="cat-title"><?php echo $cat->cat_name; ?></div> <div class='posts-list'> <?php query_posts('posts_per_page=5&cat='.$cat->cat_ID); while(have_posts()) { the_post(); $category = get_the_category(); $category_link = get_category_link($cat->cat_ID); if ($category[0]->cat_ID == $cat->cat_ID) { get_template_part('include/post-item'); //include post content } } ?> </div><!-- /posts-list --> <a href="<?php echo esc_url( $category_link ); ?>" class="btn"><?php _e('See more', 'crea'); ?></a> </div><!-- /cat-block --> <?php } ?> </div><!-- /home-wrap -->
В файле post-item.php
выводим данные, которые нам нужно получить из каждой записи, например, заголовок, ссылку на запись, миниатюру и excerpt.
Если немного изменить код, то можно будет выводить все подкатегории с записями из нужной родительской категории.
Попытаюсь объяснить проще.
Задача — нужно создать шаблон страницы Ресторанного меню (примитивный пример), на данной странице должны выводиться определенные разделы меню и все блюда, например, на странице Стандартное меню, должны выводиться Первые блюда, Вторые блюда и Салаты, а на Странице Банкетное меню: Коктейльная карта, Алкогольные напитки и Безалкогольные напитки (или что угодно).
Решение:
- Создаем шаблон страницы Меню с кастомным полем «ID Родительской Категории»
cat_id
(Создаем с помощью ACF или любым другим способом). - Создаем страницу Стандартное меню с шаблоном Меню и страницу Банкетное меню с шаблоном Меню.
- Создаем категорию Стандартное меню и в ней подкатегории Первые блюда, Вторые блюда и Салаты, создаем категорию Банкетное меню и в ней подкатегории Коктейльная карта, Алкогольные напитки и Безалкогольные напитки. В каждой из дочерних категорий есть свои записи блюд.
- На странице Стандартное меню выводим ID категории Стандартное меню, а на странице Банкетное меню выводим ID категории Банкетное меню в кастомное поле «ID Родительской Категории».
- Берем код, который выше и вставляем его в шаблон страницы Меню с небольшим изменением:
меняем:
$cats = get_categories();
на этот код:
// получаем числовое значение ID нужной категории из кастомного поля $cat_id = (int) get_field('cat_id'); // получем все дочерние категории от заданной по ID родительской категории $cats = get_categories( array( 'parent' => $cat_id ) );
Это пример для формата страницы, для категорий можно сделать все немного по другому и проще, но мне нужно было выводить категории и записи именно на страницах.
В общем, это лишь частный случай применения данного кода, но это позволит не плодить массу шаблонов страниц в вашей теме и создать более гибкую структуру своего сайта.
Выводим записи только определенного формата
Самый простой вариант файла index.php в шаблоне CMS WordPress:
Делаем сортировку постов по произвольному полю «Рейтинг» — выводим вначале посты с наибольшим рейтингом. Произвольное…
В плагине ACF есть возможность вывода даты, и это — очень крутая фишка, с помощью…