WordPress 4.7引入了一个新的过滤器,允许我们轻松修改模板层次结构:
/**
* Filters the list of template filenames that are searched for when retrieving
* a template to use.
*
* The last element in the array should always be the fallback
* template for this query type.
*
* Possible values for `$type` include: \'index\', \'404\', \'archive\', \'author\', \'category\',
* \'tag\', \'taxonomy\', \'date\', \'embed\', home\', \'frontpage\', \'page\', \'paged\', \'search\',
* \'single\', \'singular\', and \'attachment\'.
*
* @since 4.7.0
*
* @param array $templates A list of template candidates, in descending order of priority.
*/
$templates = apply_filters( "{$type}_template_hierarchy", $templates );
对于404类型,我们可以按照@cjbj的建议检查当前路径。
下面是一个示例,我们通过支持404-event.php
模板,如果当前路径与^/event/
正则表达式模式(PHP 5.4+):
add_filter( \'404_template_hierarchy\', function( $templates )
{
// Check if current path matches ^/event/
if( ! preg_match( \'#^/event/#\', add_query_arg( [] ) ) )
return $templates;
// Make sure we have an array
if( ! is_array( $templates ) )
return $templates;
// Add our custom 404 template to the top of the 404 template queue
array_unshift( $templates, \'404-event.php\' );
return $templates;
} );
如果我们的习惯
404-event.php
那就不存在了
404.php
是后备方案。
我们也可以调整404.php
根据@EliCohen的建议,模板文件符合我们的需要
我们也可以用旧的404_template
过滤器(自WordPress 1.5起),在locate_template()
被调用。
下面是一个示例(PHP 5.4+):
add_filter( \'404_template\', function( $template )
{
// Check if current path matches ^/event/
if( ! preg_match( \'#^/event/#\', add_query_arg( [] ) ) )
return $template;
// Try to locate our custom 404-event.php template
$new_404_template = locate_template( [ \'404-event.php\'] );
// Override if it was found
if( $new_404_template )
$template = $new_404_template;
return $template;
} );
希望您能进一步测试,并根据您的需要进行调整!