函数文档

get_attachment_template()

💡 云策文档标注

概述

get_attachment_template() 函数用于获取附件模板文件的路径,遵循特定的模板层级顺序。它基于当前查询对象的 MIME 类型动态构建模板列表,并通过 get_query_template() 返回最终路径。

关键要点

  • 函数返回附件模板文件的完整路径字符串。
  • 模板层级顺序为:{mime_type}-{sub_type}.php、{sub_type}.php、{mime_type}.php、attachment.php,例如 image-jpeg.php、jpeg.php、image.php、attachment.php。
  • 使用 get_queried_object() 获取当前查询对象,并从中提取 MIME 类型和子类型来构建模板数组。
  • 可通过动态 Hook 如 '$type_template_hierarchy' 和 '$type_template'(其中 $type 为 'attachment')过滤模板层级和路径。
  • 相关函数包括 get_queried_object() 和 get_query_template()。

代码示例

function get_attachment_template() {
    $attachment = get_queried_object();

    $templates = array();

    if ( $attachment ) {
        if ( str_contains( $attachment->post_mime_type, '/' ) ) {
            list( $type, $subtype ) = explode( '/', $attachment->post_mime_type );
        } else {
            list( $type, $subtype ) = array( $attachment->post_mime_type, '' );
        }

        if ( ! empty( $subtype ) ) {
            $templates[] = "{$type}-{$subtype}.php";
            $templates[] = "{$subtype}.php";
        }
        $templates[] = "{$type}.php";
    }
    $templates[] = 'attachment.php';

    return get_query_template( 'attachment', $templates );
}

注意事项

  • 自 WordPress 4.3.0 起,MIME 类型逻辑顺序已反转,使层级更合理;函数最初在 2.0.0 版本引入。
  • 确保附件对象存在且 MIME 类型正确,以避免模板路径错误。

📄 原文内容

Retrieves path of attachment template in current or parent template.

Description

The hierarchy for this template looks like:

  1. {mime_type}-{sub_type}.php
  2. {sub_type}.php
  3. {mime_type}.php
  4. attachment.php

An example of this is:

  1. image-jpeg.php
  2. jpeg.php
  3. image.php
  4. attachment.php

The template hierarchy and template path are filterable via the ‘$type_template_hierarchy’ and ‘$type_template’ dynamic hooks, where $type is ‘attachment’.

See also

Return

string Full path to attachment template file.

Source

function get_attachment_template() {
	$attachment = get_queried_object();

	$templates = array();

	if ( $attachment ) {
		if ( str_contains( $attachment->post_mime_type, '/' ) ) {
			list( $type, $subtype ) = explode( '/', $attachment->post_mime_type );
		} else {
			list( $type, $subtype ) = array( $attachment->post_mime_type, '' );
		}

		if ( ! empty( $subtype ) ) {
			$templates[] = "{$type}-{$subtype}.php";
			$templates[] = "{$subtype}.php";
		}
		$templates[] = "{$type}.php";
	}
	$templates[] = 'attachment.php';

	return get_query_template( 'attachment', $templates );
}

Changelog

Version Description
4.3.0 The order of the mime type logic was reversed so the hierarchy is more logical.
2.0.0 Introduced.