get_template_part на основе категории post

У меня есть установка сайта WordPress с 5 основными родительскими категориями, каждая из которых содержит десятки дочерних категорий

Для каждого сообщения WordPress в файле single.php я хотел бы загрузить некоторый контент на основе каждой дочерней категории, к которой принадлежит сообщение.

т.е. если в категории «буквы> ABC», get_template_part abc.php

т.е. если в категории «буквы> ABC» и «цифры> 123», get_template_part abc.php и 123.php и т. д.

На данный момент я делаю это длинный и неэффективный способ:

<?php if (in_category( 'xxx' )) : get_template_part( 'templates', 'xxx' ); endif;?> <?php if (in_category( 'zzz' )) : get_template_part( 'templates', 'zzz' ); endif;?> 

Но, очевидно, это непрактично для большого количества категорий, так как у меня было бы около 500 из тех, что я предполагаю, что значительно замедлит работу сайта.

В идеале я хотел бы использовать что-то вроде:

 <?php foreach ((get_the_category()) as $childcat) { if (cat_is_ancestor_of(165, $childcat)) { get_template_part( 'templates', '$childcat->slug' ); } ?> 

Мне было интересно, где я ошибаюсь с вышеуказанным кодом? Мой PHP невелик – заблаговременно за любую помощь, которую вы можете предложить.

детеныш

Изменить: благодаря Birgire (ниже) рабочий код:

 <?php foreach ((get_the_category()) as $childcat) { if (cat_is_ancestor_of(165, $childcat)) { get_template_part( 'templates', $childcat->slug ); } } ?> 

и измените значение 165 на любой идентификатор родительской категории.

Это загрузит шаблон под названием templates-xxx.php, где xxx – это имя дочерней категории дочерних элементов.

Похоже, что одинарные кавычки дают вам проблемы.

Заменить:

 get_template_part( 'templates', '$childcat->slug' ); 

с:

 get_template_part( 'templates', $childcat->slug ); 

Обратите внимание, что строки с двойными кавычками в PHP могут анализировать переменные, а не одинарные кавычки .

Также проверьте фигурный синтаксис в документах PHP в разделе разбора переменных .