WordPress的子主题是一个非常灵活【本文受版权保护】【版权所有,侵权必究】的用法,它可以帮助博主对原有主题进行扩展【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】,但是由于子主题对父主题有继承,因此,在本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】路径问题上就比较复杂。本文通过几个例子,未经授权,禁止复制转载。未经授权,禁止复制转载。来解析WordPress子主题的路径问题本文版权归作者所有,未经授权不得转载。【本文受版权保护】。
【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【本文受版权保护】启用子主题后的路径选择【原创内容,转载请注明出处】
原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】假设你的父主题是theme,子主题是th【本文受版权保护】原创内容,盗版必究。eme-child,而当前的主题是the本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.netme-child,也就是子主题,那么在子著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。主题的模板开发的时候,应该怎样正确调用路著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。径呢?
【本文受版权保护】未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】假设父主题你是完全不能修改的,因为它会升原创内容,盗版必究。【原创不易,请尊重版权】级,你修改了,一升级所有的修改就没有了。【转载请注明来源】本文作者:唐霜,转载请注明出处。你只能修改子主题来达到自己想要的目的。
【原创内容,转载请注明出处】原创内容,盗版必究。【转载请注明来源】【转载请注明来源】【版权所有】唐霜 www.tangshuang.net在子主题中:【访问 www.tangshuang.net 获取更多精彩内容】
【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。【本文受版权保护】【未经授权禁止转载】本文作者:唐霜,转载请注明出处。get_option('tempate') = themeget_option('stylesheet') = theme-child
这是怎么做到的呢?这是由于我们在子主题的转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。style.css中增加了Templat【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】e: 项,而在启用子主题的时候,如果存在未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。该项,update_option的时候,本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。则会将该项的值作为template配置项著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。的值。
【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。【转载请注明来源】【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】正是由于这个原因,所以在子主题中还会有:
【转载请注明来源】【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。get_stylesheet() = get_option('stylesheet')
STYLESHEETPATH = get_stylesheet_directory() = get_theme_root(get_stylesheet())
bloginfo('stylesheet_derictory') = get_stylesheet_directory_uri() = get_theme_root_uri(get_stylesheet())
bloginfo('stylesheet_url') = get_stylesheet_uri() = get_stylesheet_directory_uri().'/style.css'
看到这里你应该了解了吧,所有的和styl未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。esheet相关的路径都是基于get_o【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】ption(‘stylesh原创内容,盗版必究。本文作者:唐霜,转载请注明出处。eet’)的值的,因此都是定转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net位到theme-child目录中去。
【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。而同样的道理【未经授权禁止转载】
【转载请注明来源】【版权所有】唐霜 www.tangshuang.net【作者:唐霜】【原创内容,转载请注明出处】get_template() = get_option('template')
TEMPLATEPATH = get_template_directory() = get_theme_root(get_template())
bloginfo('template_url') = get_template_directory_uri() = get_theme_root_uri(get_template())
因此,在子主题中,template都是和【原创内容,转载请注明出处】【未经授权禁止转载】get_option(‘te【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。mplate’)相关的,所以本文版权归作者所有,未经授权不得转载。【本文受版权保护】都是基于theme目录,这是在子主题中最【版权所有,侵权必究】【本文首发于唐霜的博客】显著的区别。
转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net【作者:唐霜】【原创不易,请尊重版权】【作者:唐霜】在父主题中为子主题继承做准备【本文首发于唐霜的博客】
未经授权,禁止复制转载。【版权所有,侵权必究】【版权所有,侵权必究】但是,有的时候,父主题也是你开发的,你提著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。供了父主题,并对它长期升级,而希望其他开【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。发者基于该父主题,制作子主题来运行自己的【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。网站。这个时候你就必须考虑,如何保证子主本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】题是可行的,并且父主题中所使用的大部分方【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net法到子主题里面也是有效的。
著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】比如,你定义了一个常量 本文版权归作者所有,未经授权不得转载。define('__IMG__',get_template_directory_uri().'/css') 你确定这样的写法是OK的吗?到了子主题【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】中,仍然能够正确获取到父主题里面的某张图著作权归作者所有,禁止商业用途转载。【本文受版权保护】片吗?
或者,你定义了另外一个常量 本文版权归作者所有,未经授权不得转载。define('__CSS__',get_stylesheet_directory_uri().'/css') 你确定这样可以让子主题使用自己的css【本文受版权保护】【关注微信公众号:wwwtangshuangnet】目录下的文件吗?
再者,如果你希望子主题在调用某个样式文件【未经授权禁止转载】本文作者:唐霜,转载请注明出处。的时候,先找子主题目录中是否存在该样式文【本文首发于唐霜的博客】【转载请注明来源】件,如果不存在,使用父主题目录中对应的样原创内容,盗版必究。【原创不易,请尊重版权】式文件,这个功能你知道怎么去实现吗?(注【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。意,你现在是父主题的开发者)
转载请注明出处:www.tangshuang.net【转载请注明来源】本文作者:唐霜,转载请注明出处。实际上,从程序上,template和st本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.netylesheet对应的值和前面一节是一样【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】的,在父主题的模板代码(甚至插件的代码)本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】中,
【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。原创内容,盗版必究。get_template() = themeget_stylesheet() = theme-child
这和子主题中的结果是一样的。【作者:唐霜】
【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。【版权所有,侵权必究】转载请注明出处:www.tangshuang.net其实,本文作者:唐霜,转载请注明出处。核心问题在于思维【未经授权禁止转载】。也就是说,你在开发父主题的时候,必须时著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】刻思考一下,此处是否会在子主题中做扩展。
【转载请注明来源】著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net如果必须使用父主题的,使用templat【版权所有,侵权必究】【原创内容,转载请注明出处】e;而如果允许使用子主题的,则使用sty转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.netlesheet。
著作权归作者所有,禁止商业用途转载。【作者:唐霜】【本文首发于唐霜的博客】
基于此,你在 【版权所有】唐霜 www.tangshuang.net<link rel="stylesheet"> 的href标签中,应该使用 【原创不易,请尊重版权】get_stylesheet_uri() 来调用子主题的style.css(如果【未经授权禁止转载】【原创内容,转载请注明出处】博主启用的是父主题,则调用的是父主题的s本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】tyle.css)。还有,如果你希望包含本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】某一个php文件来实现某些功能,如果希望本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】子主题自己可以来做的话,应该使用 include(STYLESHEETPATH.'/yourfile.php') ,但如果你不允许子主题对此进行变动,则【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】应该直接inlcude('yourfile.php') 。转载请注明出处:www.tangshuang.net
刚才提到,如果子主题存在,则用,如果不存【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。在,则用父主题的,其实也很简单,通过file_exists去判断。【本文受版权保护】
function get_style($file) {
// for example:
$file = 'css/mystyle.css';
$dir_path = is_child_theme() ? STYLESHEETPATH : TEMPLATEPATH;
$dir_url = is_child_theme() ? get_stylesheet_directory_uri() : get_template_directory_uri();
if(file_exists($dir_path.'/'.$file))
return $dir_url.'/'.$file;
}
这样可以确保你可以获得正确的css文件的【本文首发于唐霜的博客】【本文受版权保护】最终URL。
未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。插件中filter钩子切换主题的正确姿势
本文版权归作者所有,未经授权不得转载。【本文受版权保护】【转载请注明来源】上面你仅仅是一个主题开发者,现在切换到插原创内容,盗版必究。转载请注明出处:www.tangshuang.net件开发者的角色。在插件中,你试图通过对设【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。备的判断,对主题进行切换,当访客是手机访本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。问时,你希望你的博客切换到theme-m著作权归作者所有,禁止商业用途转载。【本文受版权保护】obile主题,而该主题,其实是them【未经授权禁止转载】【本文首发于唐霜的博客】e主题的子主题。
【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】如果你去研究上面提到的那些和templa本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】te相关的函数源码的话,就会发现每一个函【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】数末尾几乎都申请了和函数名一样的钩子,只著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】需要add_filter()即可修改其返回结果,例如在插件中增加如下【原创不易,请尊重版权】【未经授权禁止转载】代码:
add_filter('get_template','my_filter_template');
function my_filter_tmeplate($theme) {
return $theme.'-mobile';
}
那么就会将get_template的返回【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】结果加上’-mobile【转载请注明来源】转载请注明出处:www.tangshuang.net8217;后缀。当然,你可以把这个函数丰【本文受版权保护】【原创内容,转载请注明出处】富一些,增加很多判断来实现你的目的。我们【本文受版权保护】【关注微信公众号:wwwtangshuangnet】甚至都可以改变get_option的返回【本文受版权保护】【版权所有,侵权必究】值,比如:
原创内容,盗版必究。【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。add_filter('option_template','my_filter_template_option');
这样,从根源上就把主题切换到了theme转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】-mobile。而选择使用哪个主题模板文【作者:唐霜】未经授权,禁止复制转载。件,无非是include(TEMPLATEPATH.'/index.php') 这样的机制,而你通过改get_temp原创内容,盗版必究。【作者:唐霜】late()的返回值,实际上也就改变了T著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】EMPLATEPATH。
基于这种原理,你甚至可以改get_tem【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。plate_directory()的返回著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net值,让主题的路径定位到其他位置,比如:
本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】add_filter('template_directory','my_filter_template_directory');
function my_filter_template_directory() {
return ABSPATH.'/template';
}
这样,你直接在网站根目录建立一个temp【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。late目录来存放主题就可以了。但是,即本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。使这样,URL部分还是会定位到原来的目录原创内容,盗版必究。未经授权,禁止复制转载。去。
【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。【作者:唐霜】【本文受版权保护】回到原始话题,在插件中,临时切换主题,从【原创不易,请尊重版权】【未经授权禁止转载】主题theme切换到theme-mobi【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】le,需要承担风险。我们来梳理这个过程:
【未经授权禁止转载】【未经授权禁止转载】【未经授权禁止转载】目标:你希望在手机访问时,使用theme【未经授权禁止转载】未经授权,禁止复制转载。-mobile主题,因为该主题是them【作者:唐霜】【转载请注明来源】e主题的子主题,所以可以复用theme主原创内容,盗版必究。【转载请注明来源】题中的一些内容。而在PC端访问的时候,正本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】常使用theme主题。
【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net【作者:唐霜】问题:如何利用上面的知识,正确filte【原创不易,请尊重版权】【作者:唐霜】r路径?
著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】实现:使template为theme,使转载请注明出处:www.tangshuang.net【转载请注明来源】stylesheet为theme-mob未经授权,禁止复制转载。转载请注明出处:www.tangshuang.netile。
转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。【转载请注明来源】著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netfunction DeviceThemeExtends($theme){
if(wp_is_mobile())
$theme .= '-mobile';
return $theme;
}
add_filter('option_stylesheet','DeviceThemeExtends' );
直接从option的根源上,实现我们的目【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】的。
本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。2016-01-17 11276


