如何用Filter/Action Hook按自定义文章类型字段值分配模板
WordPress自定义文章类型基于自定义元值动态加载模板方案
实现思路
使用WordPress核心提供的template_include过滤器钩子,在模板加载前判断自定义文章类型和对应的自定义元值,替换为对应模板即可。
操作步骤
- 将以下代码添加到当前激活主题的
functions.php文件中,也可以放入自定义功能插件中:
add_filter( 'template_include', 'custom_project_dynamic_template' ); function custom_project_dynamic_template( $template ) { // 仅对单篇project自定义文章类型生效 if ( is_singular( 'project' ) ) { global $post; // 此处替换为你实际使用的自定义字段键名 $project_meta_value = get_post_meta( $post->ID, '你的自定义字段key', true ); // 元值为website时加载对应模板 if ( $project_meta_value === 'website' ) { $custom_template = locate_template( 'project-website.php' ); if ( $custom_template ) { return $custom_template; } } // 元值为mobile或其他情况,默认走原来的single-project.php,无需额外处理 } return $template; }
- 把你写好的
project-website.php模板文件放到当前激活主题的根目录下。
注意事项
- 代码中
你的自定义字段key需要替换为你实际存储mobile/website值的自定义字段的键名,否则无法正确获取元值 - 如果
project-website.php文件不存在,代码会自动降级使用默认的single-project.php,不会导致站点报错 - 自定义字段如果是用ACF等插件创建的,同样适用该逻辑,只需要替换为对应字段名即可
内容的提问来源于stack exchange,提问作者Ali Khan
相关产品推荐
相关产品推荐

