将SINGLE_TEMPLATE过滤器替换为默认帖子的哪些内容?

时间:2012-08-18 作者:Bjorn

我正在复习关于Justin Tadlock\'s blog 但它使用了single\\u模板过滤器,该过滤器在3.4中被删除。codex说要使用{$type}\\u模板,但如果我在该页面上的代码中使用“post\\u模板”,它就不起作用。

1 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

您想要的答案在代码中。意思是,你需要去探索。

您的搜索应以wp-includes/template-loader.php. 这是WordPress在加载主题get之前包含的最后一个文件。它通过一系列条件来检查我们输出的是哪种类型的页面以及要获取的模板。

相关(冒犯?)行:

<?php
elseif ( is_single() && $template = get_single_template() ) :
现在我们知道了get_single_template 获取单个帖子的模板,我们可以在wp-includes/template.php.

<?php
/**
 * Retrieve path of single template in current or parent template.
 *
 * @since 1.5.0
 *
 * @return string
 */
function get_single_template() {
    $object = get_queried_object();

    $templates = array();

    $templates[] = "single-{$object->post_type}.php";
    $templates[] = "single.php";

    return get_query_template( \'single\', $templates );
}
还没有过滤器,但您开始了解WP是如何定位模板的。现在我们需要看看get_query_template 是的(get_query_template 也在wp-includes/template.php).

<?php
/**
 * Retrieve path to a template
 *
 * Used to quickly retrieve the path of a template without including the file
 * extension. It will also check the parent theme, if the file exists, with
 * the use of {@link locate_template()}. Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string $type Filename without extension.
 * @param array $templates An optional list of template candidates
 * @return string Full path to file.
 */
function get_query_template( $type, $templates = array() ) {
    $type = preg_replace( \'|[^a-z0-9-]+|\', \'\', $type );

    if ( empty( $templates ) )
        $templates = array("{$type}.php");

    return apply_filters( "{$type}_template", locate_template( $templates ) );
}
第一个参数是我们要定位的模板类型(single 第二个是一系列要搜索的模板。这就是我们停下来的地方。locate_template 只需在子主题目录和父主题目录中搜索$templates 数组——如果找到文件路径,则返回文件路径;如果找不到,则返回空字符串。

请注意$type 此函数中的“single”。

我写了以上所有内容,所以我可以告诉你过滤器仍然single_template. 实际字符串single_template 在源中找不到,但筛选器仍然存在(和it works).

结束

相关推荐

How to load WP functions?

我有一个mymail.php 发送电子邮件的脚本(我使用require_once( $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-includes/class-phpmailer.php\' );.) 并输出纯文本字符串(如“电子邮件发送成功”)我想在我的脚本中使用WP中定义的函数。我要调用的特定函数是get_option() 以检索网站所有者的电子邮件用户。要为特定get_option() 函数以及导入整个WP核心的内容(如主题的.php文件可用的上下文)?