wordpress自定义url路由于自定义载入模板

更新于 2021年10月16日 精品教程

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敏感词违禁词屏蔽插件wpwjc介绍与下载WordPress敏感词违禁词屏蔽插件wpwjc介绍与下载

这款插件的核心功能就是一点:找出文章中的违禁词、敏感词等措辞不当的词语,替换成你设置的更合适的词或者直接替换“*”号。请注意,需要同时下载站长工具箱违禁词屏蔽插件,安装插件时也需要两个插件同时安装。

WordPress 插件定制WordPress 插件定制

以下是在WordPress中自定义插件的简单步骤。它将启动内置的WordPress主题customizer。在登录定制程序页面上,您可以按照自定义WordPress主题的方式自定义登录页面。

wordpress怎么改中文字体wordpress怎么改中文字体

让wordpress国外主题字体变为微软雅黑其实只需要加一句自定义CSS就可以了,如果你的主题选项里有个自定义CSS输入的地方,把这段代码拷贝进去即可:如果你的主题不支持自定义CSS输入,那就把上面这句添加到你的style.css第一行。

WordPress如何自定义文章详情页模板WordPress如何自定义文章详情页模板

例如,我们准备让名称为WordPress的分类文章使用有别于其它分类的模板样式,首先在所用主题根目录新建一个名称。single-wordpress.php的模板文件。

WordPress 教程适用人群学习前提WordPress 教程适用人群学习前提

手册简介WordPress教程精选建站过程当中的常见问题进行解析,教你手把手建立一个手册说明WordPress是一个开源的内容管理系统(CMS),允许用户构建动态网站和博客。

WordPress 主题管理WordPress 主题管理

将鼠标悬停在任何主题上,然后点击主题详情。当您点击主题详细信息时,会显示以下页面。详细信息(如版本,说明,标签等)如果您要将此主题添加到您的网页/网站,然后点击激活,如果您只想查看主题,请点击实时预览。

WordPress文章自动配图、缩略图插件:wpacWordPress文章自动配图、缩略图插件:wpac

2、自动生成的图片并非真实在磁盘中的图片,而是动态生成的,如果保存到磁盘会占用大量空间,这个空间没必要浪费,因此修改主题代码,直接将缩略图的地址改为wpac自动生成的缩略图地址是一个非常好的方案。

WordPress站点地图插件wpsitemap,速度飞快不耗资源,完美替代默认站点地图WordPress站点地图插件wpsitemap,速度飞快不耗资源,完美替代默认站点地图

详细介绍多种自定义选项自定义每张地图的链接数量设置展示排序,可设置最新到最老或最老到最新两种展示方式:不带任何样式或者WordPress内置的站点样式多种资源灵活加入地图内容灵活选择,可控制文章、页面、分类、标签、作者这些类别资源是否加入地图