扩展主题的functions.php功能

扩展wordpress的时候,修改的最多的就是主题的functions.php文件,扩展了多了以后,functions会越来越庞大,对维护和以后的修改来说,会大大的不方便,出了问题也很难查找和恢复。
当然,我们可以使用include_once来加载自定义的文件,这种方法也很简便,但是对于修改量大或者修改频繁的来说,也会存在上面的维护问题。

include_once('functions-user.php');

现在说的是另一种方法,只要添加一段代码到functions.php文件里,以后只要把扩展的文件加到定义的文件夹里,就会自动加载,不同的扩展使用单独的文件,出错了可以直接删除,方便又安全。

修改方法:

打开主题的functions.php文件,插入以下代码:

define('INC', TEMPLATEPATH.'/inc');
IncludeAll( INC );
function IncludeAll($dir){
    $dir = realpath($dir);
    if($dir){
        $files = scandir($dir);
        sort($files);
        foreach($files as $file){
            if($file == '.' || $file == '..'){
                continue;
            }elseif(preg_match('/.php$/i', $file)){
                include_once $dir.'/'.$file;
            }
        }
    }
}

以后每次为主题扩展功能的时候只要将代码保存为一个新的php文件,文件名不限,但最好是英文或数字,然后将文件放入到inc目录下即可,效果和直接将代码加到functions.php文件一样,不用一个一个的去include加载。而且一旦代码出错只要直接删除出错代码的文件即可。

WordPress tips:清理已经停用的短代码

WordPress短代码功能非常强,也很容易使用。不过如果停用后,或者更换主题后没有引入后,那在文章里就会显示出短代码,非常影响阅读。
解决方法也很简单,使用SQL替换掉短代码就可以了(替换前记得备份数据库):

UPDATE wp_post SET post_content = replace(post_content, '[shortcode]', '' ) ;
将SQL语句里的[shortcode]换成需要替换掉的短代码

添加后台html编辑按钮

有人喜欢在本地写好后到wp后台发布,有人喜欢直接使用wordpress后台写文章。我个人习惯在本地写好后上传发布,但是偶尔也会在后台用html模式写文章,可是WP默认的按钮太少了,而自己又添加了很多shortcode。

修改方法:

wp的按钮定义在wp-includes下的quicktags.js文件里,但是直接修改核心代码太过危险了,我们可以自定义一个diy-quicktags.js并在functions.php里注册引入这个js就行了。

自定义js文件:

新建一个文件diy-quicktags.js,编辑内容:

QTags.addButton( '<', '<', '<', '' );
QTags.addButton( '>', '>', '>', '' );
QTags.addButton( 'hr', 'hr', "\n<hr />\n", '' );
QTags.addButton( 'h1', 'h1', "\n<h1>", "</h1>\n" );
QTags.addButton( 'h2', 'h2', "\n<h2>", "</h2>\n" );
QTags.addButton( 'h3', 'h3', "\n<h3>", "</h3>\n" );
//这儿共有四对引号,分别是按钮的ID、显示名、点一下输入内容、再点一下关闭内容(此为空则一次输入全部内容),\n表示换行。
注册js文件:

打开主题下的functions.php文件,添加:

/**
 * 注册后台HTML编辑器按钮添加JS到WP
 * 需要添加的按钮在diy-quicktags.js里修改
 */
function diy_quicktags() {
    wp_register_script('diyquicktagsJS',get_stylesheet_directory_uri().'/diy-quicktags.js',array('quicktags'));
    wp_enqueue_script('diyquicktagsJS');
}
add_action('admin_print_scripts', 'diy_quicktags');

简单定义一个按钮样式

利用好CSS可以制作出精美的效果,比如下面的各种按钮:
buttons
这里拿个简单的做例子,比如CSS代码如下:

a{
    border: 0px none;
    font-family: 'Open Sans','Microsoft YaHei', sans-serif;
    font-size: 100%;
    font-style: inherit;
}
a.z-button,
a.z-button:visited {
    display: inline-block;
    color: #fff!important;
    background: #ff4a64;
    text-decoration: none!important;
    text-align: center;
    font-weight: 700;
    outline: none;
    border-radius: 2px;
    line-height: 1em;
    padding: 10px 20px!important;
    cursor: pointer;
    margin: 0 0.1em 1.5em 0!important;
    vertical-align: middle;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    -o-border-radius: 2px;
}
a.z-button:hover {
    text-decoration: none;
    background: #fd3e59;
}
a.z-button:active {
    position: relative;
    top: 1px;
}

使用时候只需要定义 a 标签的class属性为z-button就可以调用css样式
最终的显示效果就是这样的:
Download

关闭wordpress写文章的版本功能

在wordpress后台写文章的时候,wordpress会定时保存文章为草稿,避免突发情况造成文字丢失。默认为60秒。
每次修改文章后,wordpress都会存储上一版本到数据库,如果修改的频繁,会发现有几十个旧版本,这些旧版本没有存在的必要还占用数据库。
wordpress后台可以直接修改主题的代码,这个功能很方便,但是也很危险,一个失误就可能导致wordpress无法打开,禁用掉这功能,在本地编辑测试后上传的方法更安全。
打开wordpress目录下的wp-config.php文件:
通过修改 WP_POST_REVISIONS,AUTOSAVE_INTERVAL,DISALLOW_FILE_EDIT函数来控制,代码如下:

/**
 * 版本修订功能设置
 * WP_POST_REVISIONS 的数值表示存储的版本数量,false 为禁用版本修订功能。
 * AUTOSAVE_INTERVAL为自动保存间隔时间(秒,默认设置为60秒)。
 * 如需禁用此功能,请移除或注释掉。
 */
define('WP_POST_REVISIONS', 2);
define('AUTOSAVE_INTERVAL', 120);
/**
 * 禁止Wordpress后台的主题编辑功能
 * 可以避免后台错误修改后造成的网站无法访问。
 * 如需禁用,请移除或注释掉本行。
 */
define('DISALLOW_FILE_EDIT', true);

设置robots.txt文件来管理搜索引擎收录

robots.txt 是一个搜索引擎跟我们约定俗成的文件,通过这个文件我们来告诉搜索引擎,我们允许还是拒绝收录,允许哪些搜索引擎,拒绝哪些搜索引擎,允许搜索哪些内容,而又拒绝哪些内容被搜索引擎捕获。
robots.txt是一个简单的txt文本文件,内容也很简单,甚至可以为空。而且这个文件不是必须的。
如果你让站点被所有搜索引擎收录,那么直接不需要这个文件或者创建这个文件,内容为空就可以了。
robots.txt必须放在网站的根目录下,并且文件名为小写的“robots.txt”。
robots.txt里一般情况下只写两个函数 User-agent 和 Disallow,前一个用来定义搜索引擎的种类,后一个用来设置允许收录的内容。
需要注意的是,如果robots.txt内容不为空的话,则必须至少需要一个Disallow函数。
如果允许所有搜索引擎就这样写:

User-agent: * 星号表示允许所有搜索引擎

如果允许搜索引擎搜索全部内容就这样写:

Disallow: 没错,留空就行了。
如果全部不允许的话,添加个“/”就行了,写成: Disallow: /

例子:允许所有搜索引擎收录所有内容,可以这样写

User-agent: *
Disallow:

如果需要详细定义目录下不被允许的文件,就这样定义:

Disallow: /index.php 表示不允许抓取 http://www.example.com/index.php 这个页面。
Disallow: /index.php? 表示不允许抓取 http://www.example.com/index.php?search=xxxxxx 类似这样的动态页面。
Disallow: /index/ 表示不允许抓取index整个目录下所有内容,例如: http://www.example.com/index/index.php
Disallow: /*.jpg$ 表示不允许抓取所有jpg格式的图片文件。

如果需要详细定义搜索引擎的种类,就这样定义:

User-agent: Googlebot 配合Disallow或者Allow来定义此谷歌搜索引擎被允许或者不允许。

各搜索引擎的名称:

谷歌:Googlebot
百度:Baiduspider
雅虎:Yahoo!slurp
搜搜:Sosospider
有道:YoudaoBot

需要特别注意的是定义里使用的是英文冒号,大小写字母也不通用。

让中文版wordpress显示英文的日期格式

使用不同的wp主题的时候,需要显示的日期格式也不一样,比如使用某些外国主题的时候,使用中文语言包里设置,中文的月份显示会让整个版面不协调,比如下面这个:
2014-10-13-3
有的需要修改成数字就可以了:
2014-10-13-4
修改方法:
搜索get_the_time函数,修改the_time(“M“)为想要的格式,
2014-10-13-5
这种方法可以把中文的比如“五月”改成“05”,另一个问题又来了,如果想显示“May”怎么办?
两个办法:用poedit修改zh_CN.po里边,把汉化翻译改掉,这方法比较麻烦
另一个方法就是重新定义PHP的date函数来避开汉化:

/*使用get_the_time('U')获取时间戳
 *然后用date函数重新输出
 */
echo date('M',get_the_time('U')); 

各取数的定义如下:

a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"