wordpress自定义url路由于自定义载入模板
wordpress强大的hook能够让我们去自定义路由,在使用框架的时候一般路由是写在一个配置文件中,wordpress作为一个cms系统,自然是不能这么干,实际上,wordpress路由规则是写在数据库中,自定义路由其实就是修改这个数据库的值。
修改路由规则
$rules = get_option('rewrite_rules');
可以在在主题或者插件激活的时候将这个rewrite_rules修改就可以了。
比如我需要有一个www.imwpweb.com/filter这样的url,那么可以这样
$rules = get_option('rewrite_rules'); $new = array('filter$' => 'index.php?tpl_page=filter'); update_option('rewrite_rules', $new + $rules);
不过实际上这样可能是会有问题的,当用户在后台修改了固定链接,之前的设置会被覆盖,因此只能在主题中动态的加载路由规则了。
add_filter( ‘rewrite_rules_array’,array(&$this, ‘rewriteRules’));
public function rewriteRules($rules)
{
$newrules = array();
$newrules[‘filter$’] = ‘index.php?tpl_page=filter’;
return $newrules + $rules;
}
增加自定义查询
默认这个tpl_page查询是不会加入到$GLOBALS[‘wp_query’]中的query_var变量中,默认wordpress的public_query_vars有这么一些
array('m', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );
现在需要做的就是扩展这些内容,好在wordpress已经内置了一个过滤器,源代码中写的是
$this->public_query_vars = apply_filters( ‘query_vars’, $this->public_query_vars );
我们可以使用query_vars过滤器来修改返回值,在主题或者插件中可以这样写
public function queryVars($vars) { array_push($vars, 'tpl_page'); return $vars; }
这样wp就能将rewrite之前的tpl_page中的值经过过滤之后,加到query_var中了。
增加自定义模板指向
经过上面这些步骤,已经可以让 /filter这个页面可以访问了,但是访问的内容是什么呢?就需要我们自定义模板指向了,主题作者都知道文章页面的会加载single.php,首页会加载index.php等等,那么这个filter页面,我们可以自定义的加载我们主题下面的代码。
wp有一个钩子是template_include,这个钩子是在加载模板之前执行的,wp中这样写
$template = apply_filters( ‘template_include’, $template )
那么我们就可以根据传来的query_var来加载我们自定义的模板,可以这样写
public function customTemplate($template){ if (!isset($GLOBALS['wp_query']->query_vars['tpl_page'])) { return $template; } $reditectPage = $GLOBALS['wp_query']->query_vars['tpl_page']; if ($reditectPage == "filter"){ $template = locate_template( array( 'filter.php' ) ); if ( $template != '' ) { return $template; } } return $template; }
construct中可以直接勾上
add_action("template_include", array(&$this, 'customTemplate'));
这样就可以达到目的。
你可能还喜欢下面这些文章

WordPress主题自定义选项突然消失是常见问题,通常由主题兼容性、插件冲突或权限设置导致。本文提供详细排查步骤:首先检查当前主题是否支持Customizer功能,临时切换默认主题测试;其次通过停用插件逐一排查冲突源;验证用户权限是否被误修

如何利用WordPress创建自定义404错误页面 当用户访问不存在的页面时,默认的404错误页面往往缺乏吸引力且错失用户留存机会。本文详细介绍了如何通过简单方法打造个性化404页面,提升用户体验并降低跳出率。教程涵盖两种主流方案:使用El

WordPress自定义文章类型(Custom Post Type)是扩展网站内容管理能力的强大工具。本文详细介绍了两种创建方法:使用Custom Post Type UI插件实现零代码操作,适合技术新手;通过functions.php文件手

WordPress自定义字段不显示是常见问题,本文系统分析8大原因及解决方案。首先确认后台"显示选项"中已启用自定义字段功能,检查主题模板是否包含get_post_meta()等字段调用代码,注意字段名称大小写和空格的一致性。排查插件冲突时建

**摘要内容:** WordPress自定义文章类型(CPT)无法归档是开发者常见的问题,通常表现为日期归档页面404或内容缺失。本文系统分析了问题根源,并提供了完整解决方案:首先检查CPT注册参数,确保`has_archive`和`pub

WordPress自定义字段是扩展文章元数据的强大工具,特别适合存储默认编辑界面无法满足的附加信息,如产品价格、活动日期等。本文详细介绍了如何启用和使用这一功能:首先确保自定义字段面板可见,通过“键-值”对结构化存储数据(如书评的ISBN号或

本文为WordPress主题自定义开发提供全流程指南,帮助用户突破模板限制打造个性化网站。从开发环境搭建(推荐XAMPP/Local)、代码编辑器选择到基础主题改造(建议使用Underscores或官方主题),详细解析主题核心文件结构(sty

为WordPress网站打造个性化登录页面能显著提升品牌形象与用户体验。本文详细介绍三种实现方法:使用LoginPress等插件可直观调整背景、LOGO、按钮等元素,适合新手;部分高级主题内置定制功能,免插件更轻量;通过编辑functions