Content-Single.php和Content-Single.php是一样的吗?

时间:2016-09-15 作者:Emad Aldeen

我明白当使用get_template_part(\'content\', get_post_format()); 这将有助于选择post format 对于特定页面,请根据帖子格式。

如果没有“即标准”的post格式,那么它将回退到content.php

但如果我用content-single.php 有这样的逻辑:

if (get_post_format() == false) {
    get_template_part(\'content\', \'single\');
    } else {
        get_template_part(\'content\', get_post_format());
}
我还需要吗content.php 页还有其他我不知道的功能吗?

2 个回复
SO网友:Fayaz

content.phpcontent-single.php 都不是一回事。

在示例代码中:

if (get_post_format() == false) {
    get_template_part(\'content\', \'single\');
} else {
    get_template_part(\'content\', get_post_format());
}
WordPress将加载content-single.php 什么时候get_post_format()false. 然而get_template_part( $slug, $name ) 仍可能尝试加载content.php 当你用get_template_part(\'content\', get_post_format()); 在以下示例中:

  1. get_post_format() 返回(例如)video.

    但是你没有content-video.php 模板零件文件。

    基本上,即使在get_post_format() 不是false, content.php 如果未创建相应的post格式相关模板部分,则仍将为您提供默认模板部分。

    Bottom line: 不管主要是什么$slug 是的,最好将默认模板部件文件作为最终的回退模板部件(在您的情况下content.php 是默认回退模板零件文件)。So YES, you may still need it. 所以不要删除它,别管它。

    以下是核心函数的代码部分get_template_part. 你会看到,核心总是$templates[] = "{$slug}.php"; 作为最终回退模板文件:

    function get_template_part( $slug, $name = null ) {
        // ... more CODE from WP core
        $templates = array();
        $name = (string) $name;
        if ( \'\' !== $name )
            $templates[] = "{$slug}-{$name}.php";
    
        $templates[] = "{$slug}.php"; 
        locate_template($templates, true, false);
    }
    
    然后,在locate_template 函数循环通过$templates 数组,直到找到相应的文件,代码如下:

    function locate_template($template_names, $load = false, $require_once = true ) {
        $located = \'\';
        foreach ( (array) $template_names as $template_name ) {
            if ( !$template_name )
                continue;
            if ( file_exists(STYLESHEETPATH . \'/\' . $template_name)) {
                $located = STYLESHEETPATH . \'/\' . $template_name;
                break;
            } elseif ( file_exists(TEMPLATEPATH . \'/\' . $template_name) ) {
                $located = TEMPLATEPATH . \'/\' . $template_name;
                break;
            } elseif ( file_exists( ABSPATH . WPINC . \'/theme-compat/\' . $template_name ) ) {
                $located = ABSPATH . WPINC . \'/theme-compat/\' . $template_name;
                break;
            }
        }
        if ( $load && \'\' != $located )
            load_template( $located, $require_once );
    
        return $located;
    }
    
    从上面的代码可以看出,如果删除content.php, 如果主题用户有一个post格式,而您没有模板部分文件,WordPress将找不到要返回的模板文件,因此在这种情况下将不加载任何内容。最后,WordPress尝试从加载模板零件文件wp-includes/theme-compat/ 核心目录,但没有content.php WP core中的模板零件文件。

    Note: 但是,如果您正在构建子主题,并且父主题已经包含content.php 文件,那么您不需要content.php 子主题中的文件(如果没有进行任何修改),因为在这种情况下,WordPress将使用父主题的content.php 文件作为备用模板零件文件。

SO网友:Vishal Kumar Sahu

您只能使用一个模板(content.php)。这通常不太理想。

从…起the teamtreehouse\'的博客应该可以澄清你的问题。

对我来说,这种方法是一种退路。

相关推荐