WordPress. Описания дочерних рубрик. Урок 2

WordPress. Описания дочерних рубрик

От автора: в продолжении предыдущего урока мы закончим работу с выводом описания рубрик. В прошлом уроке мы получили все необходимые для этого данные: переменные, массивы, объекты. Теперь же нам останется лишь работать с уже имеющимися данными, выводя их в нужном месте страницы и используя в проверках.

Итак, на текущий момент мы выводим описание той категории, к которой обратились. Но у данной категории могут быть подкатегории (дочерние категории), ссылки на которые и их описания нам нужно вывести.

скачать исходникискачать урок

Как вы помните, у нас уже есть массив объектов — $children_categories, в котором и содержится вся необходимая информация о дочерних категориях. Все что нам нужно сделать, это проверить не пуст ли данный массив. Если в массиве что-то есть, значит, есть и дочерние категории, которые мы и выведем.

Поскольку мы имеем дело с массивом объектов, то будем для вывода использовать цикл, в котором и пройдемся по массиву.

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

Также внесем некоторые правки в вывод описания рубрики выше. Дело в том, что если в рубрике много статей, то тогда начнет работать постраничная навигация. В этом случае описание будет выводиться на каждую из страниц постраничной навигации. Возможно, кому-то этот момент не очень нравится, и потому внесем небольшую правку в условие вывода описания. Ранее описание выводилось в том случае, если оно, собственно, имеется. Теперь же мы также будем проверять, на какой странице мы находимся и, если это не первая страница, тогда описание выводиться не будет. Соответственно, выше также получим номер страницы.

Итак, теперь код шаблона category.php будет таким:

<?php get_header(); ?>   
		<div class="content">

<?php
// номер рубрики
$category_id = get_query_var( 'cat' );
// номер текущей страницы
$page = get_query_var( 'paged' );
// данные о текущей категории
$category = get_category( $category_id );
// данные о дочерних рубриках
$children_categories = get_categories( "parent={$category_id}" );
?>

<?php if($category->description && !$page): // если есть описание рубрики ?>
	<div class="post-main">
		<h1><?php echo $category->name; ?></h1>
		<div class="post">
			<?php do_shortcode( $category->description ); ?>
		</div>
	</div>
	<hr /><br />
<?php endif; // конец условия - если есть описание рубрики ?>

<?php if($children_categories): // если есть дочерние категории ?>
	<?php foreach($children_categories as $children_category): ?>
		<?php $link = get_category_link( $children_category->cat_ID ); ?>
		<div class="post-main">
			<h1><a href="<?php echo $link; ?>"><?php echo $children_category->name; ?></a></h1>
			<div class="post">
				<?php if($children_category->description): ?>
					<?php do_shortcode( $children_category->description ); ?>
				<?php else: ?>
					<p>Описание по умолчанию</p>
				<?php endif; ?>
			</div>
		</div>
	<?php endforeach; ?>

<?php else: // иначе - выводим записи ?>	
			<?php if(have_posts()) : ?>
			<?php while(have_posts()) : the_post(); ?>
			<div class="post-main"> <!-- Start post -->
				<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <span>(<?php the_date_xml(); ?>)</span></h1>
				
				<div class="post">
					<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a>
					<?php the_excerpt(); ?>
<p><a href="<?php the_permalink(); ?>">Читать далее</a></p>
<p><?php the_tags(); ?></p>
				</div>
			</div> <!-- .post-main --><!-- Start post -->
			<?php endwhile; ?>
			
			<div class="nav">
				<?php posts_nav_link(); ?>
			</div>
			
			<?php endif; ?>
<?php endif; // конец условия - если есть дочерние категории ?>
		</div>
<?php get_sidebar(); ?>	
	</div>
	
<?php get_footer(); ?>

Осталось лишь убрать вывод длинных описаний из атрибута title рубрик. Для этого в файле функций добавим несколько строк кода:

add_filter("wp_list_categories", "remove_title");
function remove_title($str){
	$str = preg_replace('#title="[^"]+"#',	'title=""', $str);
	return $str;
}

Вот, собственно, и все. Мы справились со всеми задачами, поставленными парой уроков ранее. На этом я с вами прощаюсь. До новых встреч. Удачи!

Хотите быстро научиться создавать сайты и блоги на WordPress с уникальным дизайном?

Получите самую полную в Рунете бесплатную систему обучения создания сайтов на WordPress “Уникальный сайт с нуля”

Получить

Метки: ,

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (15)

  1. Петар

    Привет, Андрей. Этот урок, как и остальные на высоком уровень. А у меня такой вопрос — идея. Как сделать многоязычний сайт на wordpress?

    • Андрей Кудлай

      Приветствую.
      Проще всего для этого воспользоваться любым подходящим плагином.

      • Петар

        Спосибо Андрей. Я только пытался подсказать Вам идею за новых урок (ам). Думаю что интересует не только мне но и других.
        Пока успех: П. Петров

        • Андрей Кудлай

          Ок, спасибо за идею :)
          Возможно, в ближайшее время ее реализую и запишу урок по работе с этим плагином.

  2. Gennadiy1630

    Здравствуйте Уважаемый Андрей!
    Хочу Вас поблагодарить. Все очень доходчиво и логично.
    У меня возник такой вопрос? Возможно-ли при выводе вложенных данных то есть, подкатегорий и записей вывести только те подкатегории и записи, которые относятся только к своему родителю, а дочерние записи относящиеся к подкатегории(не к категории) не выводить. То есть клиент из админки в разделе категории, сам формирует уровни с конкретными данными, будь то под-рубрика или запись которые одновременно привязывается к родительской рубрике?

    • Андрей Кудлай

      Здравствуйте, Геннадий.
      Да, думаю возможно. Как вариант, можно пробовать добавить собственную выборку (класс WP_Query), с помощью которого можно выбрать записи нужно категории (для этого можно использовать выборку по параметрам категорий).

  3. Gennadiy1630

    Спасибо Андрей большое. Я попытаюсь.

  4. Камиот

    Здравствуйте. Вопрос такой. Как вывести дочерние категории только у родителя? Сейчас «дочки» выводятся у меня и у родителя, и у самих дочек

    • Андрей Кудлай

      Здравствуйте. Чуть выше в комментарии я предложил вариант использования собственной выборки — класс WP_Query. Ну а конкретную реализацию с кодом в комментарии, к сожалению, показать невозможно, для этого нужен отдельный урок.

      • Gennadiy1630

        Андрей, следуя Вашему совету я разобрался. И все получилось прекрасно. И сайт сделал. Жалко только заказчица куда-то растворилась. Не порядочная оказалась. Выходит сайт сделал для себя но и это радует. Если я правильно понял, то в этом варианте так же как и у меня нужно вывести в первом цикле категории и подкатегории, закрыть цикл обязательно (endforeach). А уже затем производить выборку указав аргументы WP_QUERY где post_type => post, Получить посты, которые входят в одну из указанных категорий category__in => get_query_var(cat)); и далее цикл для вывода постов. Форма записи как и посоветовал Андрей, имеется на странице, пройдя по ссылке. Андрей вопрос к Вам. Планируете ли Вы создать курс по созданию портала не магазина? С возможностью регистрации пользователей для создания ими персональных страничек, доски объявлений, желательно на Вашей CMS. И уроки в вашей интерпретации. Из покупателей я буду первый.

        • Андрей Кудлай

          Нет, Геннадий, пока что в планах нет создания портала, на очереди сейчас несколько других курсов… но после них, вполне возможно, обратимся и к предложенной теме.

  5. Рам

    Доброе время суток, Андрей. Спасибо за Ваши уроки. 3-4 года назад по вашим урокам нарисовал и сверстал свой первый сайт. Уроки были кажется: «8 видео как сверстать обалденный сайт и посадить на вордпресс». С этого времени интернет маркетинг стал для меня основным видом моей деятельности. И хотя сайтостроительству я не уделял много времени, предпочитая рекламу, директ, эдвордс и смм- сейчас мне понадобилось сделать туристический сайт, типа 1001tur.ru
    В нем все построенно на иерархии категорий и подкатегорий. например страны- египет- курорты- хургада- горящие туры- в мае- пляжн. отдых. В итоге получается, что конечных страниц очень мало- «горящие туры в хургаду в мае пляжный отдых», а все остальное это категории и подкатегории.
    Подскажите, пожалуйста, как это реализовать на вордпресс. Заранее благодарен.

    • Андрей Кудлай

      Здравствуйте. Так и реализуйте, согласно структуре. Т.е. создавайте категории, в которых будут подкатегории и записи. Запись это будет, я так понимаю, информация об отеле.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree