GET_TEMPLATE_PART基于帖子类别

时间:2017-05-27 作者:Joey

我有一个WordPress网站,有5个主要的父类别,每个类别有几十个子类别

对于单个WordPress帖子。php,我想根据帖子所属的每个子类别slug加载一些内容。

i、 e.如果在“信件>ABC”类别中,请获取\\u template\\u part ABC。php

i、 e.如果在“字母>ABC”和“数字>123”类别中,请获取\\u template\\u 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更改为父类别ID是什么。

这将加载名为templates xxx的模板。php,其中xxx是子类别slug名称。

1 个回复
SO网友:birgire

看起来单引号给你带来了问题。

替换:

get_template_part( \'templates\', \'$childcat->slug\' ); 
使用:

get_template_part( \'templates\', $childcat->slug ); 
请注意,PHP中的双引号字符串可以解析变量,而不是单引号。

还可以查看PHP文档中的curly语法variable parsing 部分

结束