《Bootstrap实战》
之前做项目时,用了bootstrap框架。只是简单用了,导航、栅栏布局。带着兴趣在图灵社区翻到一本《Bootstrap实战》,于是乎开始了bootstrap之旅。(之前在慕课上学过大漠老师的Bootstrap课程)
既然动手学习,那么必然会遇到各种各样的问题,当然解决问题就是在不断的提升自己。
问题产生在《Bootstrap实战》第三章里,WordPress自定义主题部分。
问题:严格按照操作步骤,将bootstappin-theme文件放在了,wordpress/wp-content/themes/路径下。
当然,也能启用主题了。
但是,自定义主题时,主题的样式(css)、js、jquery、ajax统统都不好使。
也就是实现不了书中给出的效果。
而书中提示说如果导航和文本不能应用Bootstrap的样式,则修改固定链接。
(于是,开始不断尝试修改固定链接)
于是乎,开始各种调试,各种修改固定链接,当然了最终的结果都是不好使。
debug时发现了一个惊人的现象,那就是当前主题加载样式和脚本的链接跟wordpress默认的主题加载的链接不一致。
默认主题加载链接:
class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://localhost:8080/wordpress/wp-content/themes/twentysixteen/assets/js/vendor/modernizr-2.6.2.min.js"
Bootstrappin-theme加载链接:
class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://localhost:8080/wordpress/assets/js/vendor/modernizr-2.6.2.min.js"
发现这个差异后,以此为突破口,找到当前主题文件下的 function.php
<?php
/**
* Roots includes
*/
require_once locate_template('/lib/utils.php'); // Utility functions
require_once locate_template('/lib/init.php'); // Initial theme setup and constants
require_once locate_template('/lib/wrapper.php'); // Theme wrapper class
require_once locate_template('/lib/sidebar.php'); // Sidebar class
require_once locate_template('/lib/config.php'); // Configuration
require_once locate_template('/lib/activation.php'); // Theme activation
require_once locate_template('/lib/titles.php'); // Page titles
require_once locate_template('/lib/cleanup.php'); // Cleanup
require_once locate_template('/lib/nav.php'); // Custom nav modifications
require_once locate_template('/lib/gallery.php'); // Custom modifications
require_once locate_template('/lib/comments.php'); // Custom comments modifications
require_once locate_template('/lib/rewrites.php'); // URL rewriting for assets
require_once locate_template('/lib/relative-urls.php'); // Root relative URLs
require_once locate_template('/lib/widgets.php'); // Sidebars and widgets
require_once locate_template('/lib/scripts.php'); // Scripts and stylesheets
require_once locate_template('/lib/custom.php'); // Custom functions
倒数第五行
require_once locate_template('/lib/rewrites.php');
当然可以直接将他注释掉(这是个重写文件,将/wordpress/wp-content/themes/twentysixteen/assets/ 重写为/assets/)
也可以根据目录提示打开rewrites.php
<?php
/**
* URL rewriting
*
* Rewrites do not happen for multisite installations or child themes
*
* Rewrite:
* /wp-content/themes/themename/assets/css/ to /assets/css/
* /wp-content/themes/themename/assets/js/ to /assets/js/
* /wp-content/themes/themename/assets/img/ to /assets/img/
* /wp-content/plugins/ to /plugins/
*
* If you aren't using Apache, alternate configuration settings can be found in the docs.
*
*
*/
function roots_add_rewrites($content) {
global $wp_rewrite;
$roots_new_non_wp_rules = array(
'assets/(.*)' => THEME_PATH . '/assets/$1',
'plugins/(.*)' => RELATIVE_PLUGIN_PATH . '/$1'
);
$wp_rewrite->non_wp_rules = array_merge($wp_rewrite->non_wp_rules, $roots_new_non_wp_rules);
return $content;
}
function roots_clean_urls($content) {
if (strpos($content, RELATIVE_PLUGIN_PATH) > 0) {
return str_replace('/' . RELATIVE_PLUGIN_PATH, '/plugins', $content);
} else {
return str_replace('/' . THEME_PATH, '', $content);
}
return $content;
}
if (!is_multisite() && !is_child_theme()) {
if (current_theme_supports('rewrites')) {
add_action('generate_rewrite_rules', 'roots_add_rewrites');
}
if (!is_admin() && current_theme_supports('rewrites')) {
$tags = array(
'plugins_url',
'bloginfo',
'stylesheet_directory_uri',
'template_directory_uri',
'script_loader_src',
'style_loader_src'
);
add_filters($tags, 'roots_clean_urls');
}
}
通读代码不难发现,就是将加载链接重写为/asset
于是如果没有在function.php中注释掉
require_once locate_template('/lib/rewrites.php');
你也可以在rewrites.php中将重写代码注释掉
function roots_clean_urls($content) {
/* if (strpos($content, RELATIVE_PLUGIN_PATH) > 0) {
return str_replace('/' . RELATIVE_PLUGIN_PATH, '/plugins', $content);
} else {
return str_replace('/' . THEME_PATH, '', $content);
}*/
return $content;
}
到此加载的问题解决了。
但是,wordpress应该如何支持重写加载呢。
网上给出了很多答案,例如修改wp-config.php文件,修改.htaccess文件等。
我的主题文件是根据书中提供的,但是根据书中的步骤无法实现相应的效果,于是就自己动手来解决了,不知道慕课上有多少小伙伴接触过Wordpress,也读过《Bootstrap实战》这本书,将这个问题处理的方法分享出来,希望遇到同样问题的小伙伴能得到帮助。
丙申年十月初四