如何加载/包含基于条件的类别模板?

时间:2012-08-06 作者:Fernando Baltazar

我有这行代码来获取不同的模板,我可以获得所需的模板,但我也可以在主题末尾获得默认模板。我试图用goto跳过代码,但此功能不可用:D(旧资源)并破坏代码显示故障消息

"Fatal error: Cannot break/continue 1 level in... bla bla" 
<?php {if (in_category(\'diario\') ) {  include (TEMPLATEPATH . \'/diario.php\');  

 } if (in_category(\'predicacion\')) {  include (TEMPLATEPATH .\'/predicacion.php\'); 

 } if (in_category(\'audio\')) { include (TEMPLATEPATH .\'/audible.php\'); 

 } if (in_category(\'video\')) { include (TEMPLATEPATH .\'/video.php\'); 

 } else {
 include (TEMPLATEPATH .\'/single_default.php\'); 
 }} ?>
我也试过这句话,这是WP教程的一个副本。

<?php if ( in_category(\'diario\') ) { ?>
<?php include (TEMPLATEPATH . \'/diario.php\'); ?>


<?php } if (in_category(\'predicacion\')) { ?>
<?php include (TEMPLATEPATH .\'/predicacion.php\'); ?>

<?php } if (in_category(\'audio\')) { ?>
<?php include (TEMPLATEPATH .\'/audible.php\'); ?>

<?php } if (in_category(\'video\')) { ?>
<?php include (TEMPLATEPATH .\'/video.php\'); ?>

<?php } else { ?>
 <?php include (TEMPLATEPATH .\'/single_default.php\'); ?> 
<?php } ?>
如果没有选择所需的模板single_default 正确显示。

1 个回复
SO网友:fuxia

乍一看,这似乎是一个普通的PHP问题,但至少还有一个WordPress问题。让我们从那开始。

您不应该使用includeTEMPLATEPATH 在主题中。还有其他选择include 在WordPress中:get_template_part()locate_template(). 和常数TEMPLATEPATHSTYLESHEETPATH 将在不久的将来被弃用,因为它们太受限制。

在你的情况下,我建议使用locate_template(). 它接受三个参数:

一组$template_names.$load 文件(如果找到)

  • A$require_once 参数我们暂时忽略了这一点。和$name. 然后搜索名为"{$slug}-{$name}.php" 在当前主题目录中,并将其包含在locate_template().
  • 如果函数找到文件,则返回路径,否则返回空字符串。

    假设您的分类中的单个帖子模板video 已命名single-cat-video.php 默认文件名为single-cat-default.php (您应该始终使用语音文件名)。

    此外,您还可以搜索一系列类别:

    $my_cats = array( \'diario\', \'predicacion\', \'audio\', \'video\' );
    
    现在,您只需遍历这些类别数组,直到找到一个文件:

    $found = FALSE;
    foreach ( $my_cats as $my_cat )
    {
        if (
            // we are in a category from our array and …
            in_category( $my_cat )
            // … actually found a matching file.
            and locate_template( "single-cat-$my_cat.php", TRUE ) 
            )
        {
            // As we now know that we got a template and already ↑ included it,
            // we can set a flag to avoid loading the default template.
            $found = TRUE;
    
            // … and immediately stop searching.
            break;
        }
    }
    
    // no matching category or no file found. load the default template part
    if ( ! $found )
    {
        locate_template( "single-cat-default.php", TRUE );
    }
    
    这本书可以写得更简洁,但我认为现在更容易阅读。要添加类别,只需创建一个新模板并扩展数组$my_cats 无需触摸代码的其余部分。

    结束