php 从插件中加载自定义页面模板
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 从插件中加载自定义页面模板相关的知识,希望对你有一定的参考价值。
<?php
/**
* Class Custom_Page_Templates
*/
class Custom_Page_Templates {
/**
* Storage for all custom template paths
*
* @var array
*/
protected static $_paths = array();
/**
* Add actions and filters
*/
public static function initialize() {
add_action( 'load-post.php', array( __CLASS__, 'register_templates' ) );
add_filter( 'template_include', array( __CLASS__, 'load_template' ) );
}
/**
* Register a custom template path
*
* @param string $path
*/
public static function register_path( $path ) {
self::$_paths[] = $path;
}
/**
* Register custom templates
*/
public static function register_templates() {
$theme = wp_get_theme();
$templates = array_merge( $theme->get_page_templates(), self::get_custom_templates() );
$cache_hash = md5( $theme->get_theme_root() . '/' . $theme->get_stylesheet() );
wp_cache_set( "page_templates-{$cache_hash}", $templates, 'themes', 1800 );
}
/**
* Handle loading of custom template
*
* @param string $template
* @return string $template
*/
public static function load_template( $template ) {
$custom_template = get_post_meta( get_the_ID(), '_wp_page_template', true );
if ( ! empty( $custom_template ) && array_key_exists( $custom_template, self::get_custom_templates() ) ) {
$template = $custom_template;
}
return $template;
}
/**
* Get custom templates
*
* @return array $templates
*/
public static function get_custom_templates() {
static $templates = array();
if ( empty( $templates ) && ! empty( self::$_paths ) ) {
foreach ( self::$_paths as $path ) {
$directory = new \RecursiveDirectoryIterator( $path );
$iterator = new \RecursiveIteratorIterator( $directory );
$regex = new \RegexIterator( $iterator, '/^.+\.php$/i', \RecursiveRegexIterator::GET_MATCH );
foreach ( $regex as $file => $matches ) {
$file_data = get_file_data( $file, array( 'name' => 'Template Name' ), 'page-templates' );
if ( ! empty( $file_data['name'] ) ) {
$templates[$file] = $file_data['name'];
}
}
}
}
return $templates;
}
}
以上是关于php 从插件中加载自定义页面模板的主要内容,如果未能解决你的问题,请参考以下文章
Django:在使用模板继承时在基本模板文件中加载自定义过滤器时出现问题
如何从文件中加载自定义 Django 标签?
如何从资源中加载自定义字体? [C#]
使用Google Colab时如何从Google drive中加载自定义的包模型和数据集
使用Google Colab时如何从Google drive中加载自定义的包模型和数据集
在使用 Visual Studio 2017 和 boost 构建的 python 中加载自定义 dll 时出现依赖错误