如何重写自定义文章类型的固定链接

WordPress的自定义文章类型(Custom Post Type)允许我们创建一种有别于blog posts但又能分组管理的文章类型,Custom Post Type在属性上更接近于Page,而非Post,它们的固定链接(Permalink)也不受制于后台-设置-固定链接中为Post规定的链接格式。

如何注册自定义文章类型

注册自定义文章类型用到的函数是register_post_type,可以套用官方文档的代码示例,将下面的代码放到主题的functions.php中,到后台查看菜单,就会发现多了一个选项卡叫“Books”。
add_action( 'init', 'codex_custom_init' );
function codex_custom_init() {
$labels = array(
'name' => _x('Books', 'post type general name'),
'singular_name' => _x('Book', 'post type singular name'),
'add_new' => _x('Add New', 'book'),
'add_new_item' => __('Add New Book'),
'edit_item' => __('Edit Book'),
'new_item' => __('New Book'),
'all_items' => __('All Books'),
'view_item' => __('View Book'),
'search_items' => __('Search Books'),
'not_found' =>  __('No books found'),
'not_found_in_trash' => __('No books found in Trash'),
'parent_item_colon' => '',
'menu_name' => 'Books'

);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type('book',$args);
}

自定义文章类型的默认固定链接格式

Custom Post Type默认的固定链接格式是‘post-slug/postname’,如果没有指定slug,则用post type作为slug,本例中没有指定,所有post slug就是book。
与固定链接相关的参数有rewrite、和slug
rewrite参数指定是否开启固定链接功能,rewrite默认是true,如果设置成false,假设我创建了一个book类型的文章,标题是“Harry Potter Book”,产生的链接如下:
http://mydomain.com/?post_type=book&p=33
如果rewrite为true,链接为
http://mydomain.com/book/harry-potter-book
结尾是否有反斜杠,取决于设置-固定链接中的格式结尾是否有反斜杠,建议这里结尾不要带反斜杠,否则可能出现
http://mydomain.com/book/harry-potter-book
http://mydomain.com/book/harry-potter-book/
指向同一个地址的情况,对搜索引擎不友好。

如何修改自定义文章类型的固定链接格式

假设我们创建了book类型的文章,并且用中文当做文章标题,那么默认产生的链接也将是中文,中文链接通常会编码,比较长,分享不方便。你可以手动输入英文slug,也可以通过修改固定链接格式让了链接更简短。
例如,我想让http://mydomain.com/book/harry-potter-book变成http://mydomain.com/book/33.html,也就是用文章的ID作为链接格式。
要达到这个目的:
  1. 创建新的rewrite规则翻译URL
  2. 添加filter(post_type_link),当get_the_permalink()函数调用时,返回正确的链接格式
下面有两段代码,都可以实现这个要求,代码加到functions.php中,并且要到后台-设置-固定链接中重新保存固定链接,代码才能生效。
代码段1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
add_action(‘init’, ‘custom_book_rewrite’);
function custom_book_rewrite() {
  global $wp_rewrite;
  $queryarg = ‘post_type=book&p=’;
  $wp_rewrite->add_rewrite_tag(‘%qid%’, ‘([^/]+)’, $queryarg);
  $wp_rewrite->add_permastruct(‘book’, ‘/book/%qid%.html’, false);
}
add_filter(‘post_type_link’, ‘custom_book_permalink’, 1, 3);
function custom_book_permalink($post_link, $post = 0) {
  global $wp_rewrite;
  if ( $post->post_type == ‘book’ ){
      $post = &get_post($id);
      if ( is_wp_error( $post ) )
        return $post;
      $newlink = $wp_rewrite->get_extra_permastruct(‘book’);
      $newlink = str_replace(“%qid%”, $post->ID, $newlink);
      $newlink = home_url(user_trailingslashit($newlink));
      return $newlink;
    } else {
        return $post_link;
    }
}
代码段2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
add_filter(‘post_type_link’, ‘custom_book_link’, 1, 3);
function custom_book_link( $link, $post = 0 ){
    if ( $post->post_type == ‘book’ ){
        return home_url( ‘book/’ . $post->ID .’.html’ );
    } else {
        return $link;
    }
}
add_action( ‘init’, ‘custom_book_rewrites_init’ );
function custom_book_rewrites_init(){
    add_rewrite_rule(
        ‘book/([0-9]+)?.html$’,
        ‘index.php?post_type=book&p=$matches[1]’,
        ‘top’ );
}

 针对多个Custom Post Type

将代码段2修改一下,就可以同时修改多个自定义文章类型的固定链接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$mytypes = array(
    ‘type1’ => ‘slug1’,
    ‘type2’ => ‘slug2’,
    ‘type3’ => ‘slug3’
);
add_filter(‘post_type_link’, ‘custom_book_link’, 1, 3);
function custom_book_link( $link, $post = 0 ){
    global $mytypes;
    if ( in_array( $post->post_type,array_keys($mytypes) ) ){
        return home_url( $mytypes[$post->post_type].’/’ . $post->ID .’.html’ );
    } else {
        return $link;
    }
}
add_action( ‘init’, ‘custom_book_rewrites_init’ );
function custom_book_rewrites_init(){
    global $mytypes;
    foreach( $mytypes as $k => $v ) {
        add_rewrite_rule(
            $v.’/([0-9]+)?.html$’,
            ‘index.php?post_type=’.$k.’&p=$matches[1]’,
            ‘top’ );
    }
}
$mytypes数组存储需要更改固定链接的Custom Post Type和它们的固定链接前缀,例如类型为type1的固定链接将是
http://mydomain.com/slug1/875.html

本文转载于:https://www.solagirl.net/custom-post-type-permalink.html

WordPress批量替换内容之数据库SQL语句

当一个网站数据量较大时,需要替换所有内容中的部分内容最快方法,当然是在phpmyadmin使用sql语句来完成,替换前务必备份数据库,以免出现失误

替换语句

UPDATE wp_posts SET post_content = REPLACE( post_content, 'old content A', 'new content B' )

解释:更新数据库中wp_posts表post_content字段的内容”old content A”为”new content B”(不包含双引号””)

 

快捷方法:安装WordPress插件Find and Replacer 然后使用插件来,这个方便,但是我更喜欢直接用SQL语句来
完成。

插件使用方法截图如下:
WordPress批量替换数据库中内容SQL语句

WordPress常用SQL语句
筛选自定义meta的YouRUrl_value包含.pdf的内容,替换为.rar

UPDATE `wp_postmeta` SET `meta_value` = REPLACE( meta_value, '.pdf', '.rar' ) WHERE `meta_key` = 'YouRUrl_value' AND `meta_value` LIKE '%.pdf%'

 

1. 删除所有未使用的标签

DELETE a,b,c
FROM wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE c.taxonomy = 'post_tag' AND c.count = 0

 

2.删除所有文章修订版本(Revisions)以及它们的Meta数据

DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

 

3. 更改WordPress地址和首页地址

UPDATE wp_options
SET option_value = replace(option_value, 'http://www.旧网址.com', 'http://www.新网址.com')
WHERE option_name = 'home' OR option_name = 'siteurl'

 

4. 更改文章的GUID

UPDATE wp_posts
SET guid = REPLACE (guid, 'http://www.旧网址.com', 'http://www.新网址.com')

 

5. 更改正文中的链接地址

UPDATE wp_posts
SET post_content = REPLACE (post_content, 'http://www.旧网址.com', 'http://www.新网址.com')

 

6. 更新文章的Meta值

UPDATE wp_postmeta
SET meta_value = REPLACE (meta_value, 'http://www.旧网址.com', 'http://www.新网址.com')

 

7. 重设Admin密码

UPDATE wp_users
SET user_pass = MD5( 'new_password' )
WHERE user_login = 'admin'

 

8. 重设admin的用户名

UPDATE wp_users
SET user_login = 'newname'
WHERE user_login = 'admin'

 

9. 将作者a的文章全部转移到作者b

UPDATE wp_posts
SET post_author = 'b'
WHERE post_author = 'a'

 

10. 删除文章的meta标签

DELETE FROM wp_postmeta
WHERE meta_key = 'your-meta-key'

 

11. 导出所有评论中的邮件地址

SELECT DISTINCT comment_author_email
FROM wp_comments

 

12. 删除所有的Pingback

DELETE FROM wp_comments
WHERE comment_type = 'pingback'

 

13. 删除所有的垃圾评论

DELETE FROM wp_comments
WHERE comment_approved = 'spam'

 

14. 禁用所有激活的插件

UPDATE wp_options
SET option_value = ''
WHERE option_name = 'active_plugins'

 

15. 罗列所有未使用的Meta标签

SELECT *
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

 

16. 关闭旧文章的留言

UPDATE wp_posts
SET comment_status = 'closed'
WHERE post_date < '2009-01-01' AND post_status = 'publish'

 

17. 更新留言者的网址

UPDATE wp_comments
SET comment_author_url = REPLACE( comment_author_url, 'http://旧网址.com', 'http://新网址.com' )

 

18. 更新正文内所有的’target=”_blank”‘为’rel=”nofollow”‘

UPDATE wp_posts
SET post_content = REPLACE (post_content, 'target="_blank', 'rel="nofollow')

 

19.删除未使用的Meta标签

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

 

20.更改文章自定义字段的名称

UPDATE `wp_postmeta` SET `meta_key` = '新名称' WHERE `meta_key` = '旧名称';

 

wordpress如何更换域名

问题描述

在群里面看到很多朋友问,已经上线的网站要更换域名怎么办?后台的设置->常规里修改域名后,全站打不开了,这是为什么?出现这种情况后如何解决?

问题解答

其实wordpress换域名需要到数据库进行操作的,首先,来分析一下换域名的几种常见情况;

 

一、换空间换域名

1、如果是上述问题,打包备份旧空间ftp内的所有文件,进旧站数据库phpmyadmin里导出你网站的数据库sql文件;

2、将备份的ftp所有文件上传至新的空间FTP内,将备份的sql上传到新空间的数据库phpmyadmin内;

3、打开新空间ftp的网站根目录找到wp-config.php文件,编辑它(php文件不要用txt去编辑),进行编辑配置新的数据库连接信息;

4、去新的空间的数据库phpmyadmin里,做sql批量换域名处理(详见下面教程二)

 

二、仅换域名,没有换空间

打开新空间的phpmyadmin(数据库控制面板)

然后选择新的数据库名,点击后,进入wp_开头的大于等于11个的表,然后选择选项卡里的sql,如图:

然后就是进行sql批量处理的命令了:

 

UPDATE wp_options SET option_value = replace( option_value, 'http://www.old.com', 'http://www.new.com' ) WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = replace( post_content, 'http://www.old.com', 'http://www.new.com' ) ;
UPDATE wp_posts SET guid = replace( guid, 'http://www.old.com', 'http://www.new.com' ) ;

 

old代表旧域名、new代表新域名,将上面的执行语句修改为你们自己的,然后点击执行即可!

到这一步,就基本全OK了。。。当然换域名的途中也会遇到各种问题,出现问题了可以回帖或者加入我们的技术群群求帮助哈!

 

2017/12/26更新:一键更新域名插件

该插件的使用,建议没有代码经验或者连phpmyadmin是什么都不知道的小白用户,用起来超爽的!

{GO}  点击下载该插件,上传插件,启动插件,去工具-更换域名内进行设置

全部设置后,提示更换成功后,切勿以为一切已经结束,还需要到WP后台-设置-常规里 将WordPress地址和站点地址换成您的新域名网址即可!!

一段JS代码可以实现网站的简体/繁體相互转换

以前用过主机商提供类似于“简繁通”之类的产品,当然,是需要收费的。(呵呵,给我当然免费。)觉得转换速度好像不怎么样。今天发现一个新的东东:一段JS代码可以实现网站的简体/繁體相互转换,由JS进行转换。本地测试了一下。速度不错。而且效果也很好。现在说明步骤与方法。
1、JS转换文件:

 

var defaultEncoding = 2; // 1: 繁體中文, 2: 简体中文
var translateDelay = 0;
var cookieDomain = “http://log.zhoz.com/”; //更改为你的博客网址
var msgToTraditionalChinese = “繁體”; //此处可以更改为你想要显示的文字
var msgToSimplifiedChinese = “简体”;  //同上,但两处均不建议更改
var translateButtonId = “translateLink”;

var currentEncoding = defaultEncoding;
var targetEncodingCookie = “targetEncoding” + cookieDomain.replace(/\./g,””);
var targetEncoding = ( getCookie(targetEncodingCookie) == null ? defaultEncoding : getCookie(targetEncodingCookie) );
var translateButtonObject;

function translateText( txt )
{
if( txt == “” || txt == null )
return “”;
if( currentEncoding == 1 && targetEncoding == 2 )
return Simplized(txt);
else if ( currentEncoding == 2 && targetEncoding == 1 )
return Traditionalized(txt);
else
return txt;
}

function translateBody( fobj )
{
if( typeof( fobj ) == “object” )
var objs = fobj.childNodes;
else
var objs = document.body.childNodes;

for(var i=0;i<objs.length;i++)
{
var obj=objs.item(i);
if( “||BR|HR|TEXTAREA|”.indexOf( “|”+obj.tagName+”|” ) > 0 || obj == translateButtonObject )
continue;
if( obj.title != “” && obj.title != null )
obj.title = translateText( obj.title );
if( obj.alt != “” && obj.alt != null )
obj.alt = translateText( obj.alt );
if( obj.tagName == “INPUT” && obj.value != “” && obj.type != “text” && obj.type != “hidden” )
obj.value = translateText( obj.value );
if( obj.nodeType == 3 )
obj.data = translateText( obj.data );
else
translateBody(obj);
}
}

function translatePage()
{
if( targetEncoding == 1 )
{
currentEncoding  = 1;
targetEncoding = 2;
translateButtonObject.innerHTML = msgToTraditionalChinese;
setCookie( targetEncodingCookie, targetEncoding, 7 );
translateBody();
}
else if( targetEncoding == 2 )
{
currentEncoding  = 2;
targetEncoding = 1;
translateButtonObject.innerHTML = msgToSimplifiedChinese;
setCookie( targetEncodingCookie, targetEncoding, 7 );
translateBody();
}
}

function JTPYStr()
{
return ‘万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾鼋鼌鼍鼗鼹齄齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟志制咨只里系范松没尝尝闹面准钟别闲干尽脏拼’;
}

function FTPYStr()
{
return ‘萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽黿鼂鼉鞀鼴齇齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜誌製谘隻裡係範鬆冇嚐嘗鬨麵準鐘彆閒乾儘臟拚’;
}

function Traditionalized( cc )
{
var str = ”;
var ss = JTPYStr();
var tt = FTPYStr();

for(var i = 0 ; i < cc.length ; i++ )
{
if( cc.charCodeAt(i) > 10000 && ss.indexOf( cc.charAt(i) ) != -1 )
str += tt.charAt( ss.indexOf( cc.charAt(i) ) );
else
str += cc.charAt(i);
}
return str;
}

function Simplized(cc){
var str = ”;
var ss = JTPYStr();
var tt = FTPYStr();

for( var i=0 ; i < cc.length ; i++)
{
if( cc.charCodeAt(i) > 10000 && tt.indexOf( cc.charAt(i) ) != -1 )
str += ss.charAt( tt.indexOf( cc.charAt(i) ) );
else
str += cc.charAt(i);
}
return str;
}

function setCookie(name,value,days)
{
if (days)
{
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = “; expires=”+date.toGMTString();
}
else var expires = “”;
document.cookie = name+”=”+value+expires+”; path=/”;
}

function getCookie(name)
{
var nameEQ = name + “=”;
var ca = document.cookie.split(‘;’);
for(var i=0;i < ca.length;i++)
{
var c = ca[i];
while (c.charAt(0)==’ ‘) c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

function translateInitilization()
{
translateButtonObject = document.getElementById( translateButtonId );
if ( translateButtonObject )
{
with( translateButtonObject )
{
if(typeof(document.all)!=”object”)
{
href=”javascript:translatePage();”;
}
else
{
href=”#”;
onclick = new Function( “translatePage(); return false;”);
}
}

if ( currentEncoding != targetEncoding )
{
setTimeout(“translateBody()”,translateDelay);
if( targetEncoding == 1 )
translateButtonObject.innerHTML = msgToSimplifiedChinese;
else
translateButtonObject.innerHTML = msgToTraditionalChinese;
}
}
}

2、修改变量。解压后,用记事本打开,对前几行有标注的变量进行更改;
3、上传上面的JS到相应目录,只要在文件中包含相对路径即可;
4、在所需要的地方加上链接:<a id=”translateLink”>繁體</a>
5、然后在footer里加上如下代码:
<script type=”text/javascript” src=”tw_big5.js” mce_src=”tw_big5.js”></script>
<script type=”text/javascript”>
var defaultEncoding = 0; //默认是否繁体,0-简体,1-繁体
var translateDelay = 0; //延迟时间,若不在前, 要设定延迟翻译时间, 如100表示100ms,默认为0
var cookieDomain = “http://log.zhoz.com”; //Cookie地址, 一定要设定, 通常为你的网址
var msgToTraditionalChinese = “繁體”; //默认切换为繁体时显示的中文字符
var msgToSimplifiedChinese = “简体”; //默认切换为简体时显示的中文字符
var translateButtonId = “translateLink”; //默认互换id
translateInitilization();
</script>

6、等着看效果吧,帅呆了。。。。这样可以对所有的站点进行免费、快速转换吧!


本文转载于:http://log.zhoz.com/read.php?275

免插件实现WordPress SMTP邮件服务

如何让 WordPress 支持 SMTP 发送邮件呢?方法很简单,安装一个 Configure SMTP 插件,配置好邮箱参数启用就可以了。不想用插件?也行,直接将以下代码加入你使用的主题的 functions.php 即可。

//使用smtp发送邮件(请根据自己使用的邮箱设置SMTP)
add_action('phpmailer_init', 'mail_smtp');
function mail_smtp( $phpmailer ) {
	$phpmailer->FromName = '常阳时光'; //发件人名称
	$phpmailer->Host = 'smtp.qq.com'; //修改为你使用的邮箱SMTP服务器
	$phpmailer->Port = 465; //SMTP端口
	$phpmailer->Username = '123@qq.com'; //邮箱账户
	$phpmailer->Password = '123123123'; //邮箱密码
	$phpmailer->From = '123@qq.com'; //邮箱账户
	$phpmailer->SMTPAuth = true;
	$phpmailer->SMTPSecure = 'ssl'; //tls or ssl (port=25时->留空,465时->ssl)
	$phpmailer->IsSMTP();
}

这样就可以了(亲测可用)。

附上各邮箱的端口及smtp地址:

188 邮箱
pop3.188.com smtp.188.com 端口:25
163 邮箱
pop3.163.com smtp.163.com 端口:25
126 邮箱
pop3.126.com smtp.126.com 端口:25
netease 邮箱
pop.netease.com smtp.netease.com 端口:25
yeah 邮箱
pop.yeah.net smtp.yeah.net 端口:25
QQ 邮箱
pop.qq.com smtp.qq.com 端口:465或587

 

本文转载于:https://cyhour.com/7/

解决WordPress Avada 5.4 谷歌字体webfont.js问题优化后台加载速度

启动Avada主题后,网站前后台都需要加载webfont.js,前台首页和其他页面都有,查看源代码在<title>下面(如图),前台加载 https://ajax.googleapis.com/ajax/libs/webfont/1.5.3/webfont.js

WordPress 后台加载 https://ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js?ver=1.5.0

解决WordPress Avada 4.0.3 谷歌字体webfont.js
 前言和问题描述
  1. 首先,得知一个好消息:国内可以访问谷歌字体库了 fonts.googleapis.com,但依然无法访问 ajax.googleapis.com

    还有一个不好不坏的消息:360谷歌字体镜像库停止服务了 fonts.useso.com

    解决办法:WordPress的用户可以用“WP Acceleration for China”,可以用“极客族”替代谷歌地址,这个插件可以解决大部分谷歌字体和谷歌ajax库的问题,依然推荐。但是这个插件解决不了WordPress主题内部的谷歌字体问题,下面Avada主题就是个例子

    下面说说升级到Avada5.4版本后,前台和后台加载慢的问题。这个问题主要原因是由谷歌字体加载失败而导致的,特此写个文章以备后用。

     

  2. 现象:

    启动Avada主题后,网站前后台都需要加载webfont.js,前台首页和其他页面都有,查看源代码在<title>下面(如图),前台加载 https://ajax.googleapis.com/ajax/libs/webfont/1.5.3/webfont.js

    WordPress 后台加载 https://ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js?ver=1.5.0

    切换其他主题无此现象,显然是Avada主题造成的。

    解决WordPress Avada 4.0.3 谷歌字体webfont.js

解决方法

  1.  解决方案:

    找到Avada主题的两个文件,找到这两行代码,把谷歌的链接替换成极客族的即可。

  2.  前台的:/wp-content/themes/Avada/includes/lib/inc/redux/framework/FusionReduxCore/framework.php

    找到: https://ajax.googleapis.com/ajax/libs/webfont/1.5.3/webfont.js  [ 1677行左右 ]

    替换:http://fdn.geekzu.org/ajax/ajax/libs/webfont/1.5.3/webfont.js

  3.  后台的:/wp-content/themes/Avada/includes/lib/inc/redux/framework/FusionReduxCore/core/enqueue.php

    找到:https://ajax.googleapis.com/ajax/libs/webfont/1.5.0/webfont.js?ver=1.5.0 [ 291行左右 ]

    替换成:http://fdn.geekzu.org/ajax/ajax/libs/webfont/1.5.0/webfont.js

    保存上传,即可。

AVADA5 添加微软雅黑至主题选项的方法 / 与 AVADA4 添加方法不同

AVADA主题升级至5.0版本之后,添加微软雅黑字体至后台主体设置选项的方法和文件路径略有不同。

详细区别如下:

AVADA5及以上版本

文件路径为:themes/Avada/includes/lib/inc/class-fusion-data.php

下载文件至本地后添加“微软雅黑”字体后上传覆盖即可,如下图↓

然后刷新AVADA后台主题选项设置页面,按需要进行设置即可,如下图↓

AVADA4及以下版本

文件路径为:/themes/Avada/includes/class-avada-data.php

修改方法与上方一致,找准文件路径覆盖即可。

个人分享,欢迎转载。

那些连这种问题咨询都要收费的,没啥好说的,没意思。

大家互相学习!欢迎留言!

转载于寸早博客:http://xiejingzhuo.lofter.com/post/112ce3_fc453fd

免费激活(破解)Yoast SEO Premium 5.9

Yoast SEO Premium 是一款优秀的SEO 插件,分为免费版和高级版。这篇文章就介绍一下 Yoast SEO Premium 5.9 的激活方法。

安装 Yoast SEO Premium 5.9

在Github上有 Yoast SEO Premium 插件的镜像,地址为:https://github.com/wp-premium/wordpress-seo-premium。

可以使用 git clone 命令也可以直接下载ZIP 到本地,解压缩后使用 FTP上传到 plugins 目录,也可以直接在WordPress后台上传 ZIP 安装。

安装成功后,启用插件。

激活 Yoast SEO Premium 5.9

在 /plugins/wordpress-seo-premium-master/vendor/yoast/license-manager 目录下找到 class-license-manager.php 。

找到 license_is_valid() 函数 [ 374行 ]

public function license_is_valid() { return ( $this->get_license_status() === ‘valid’ ); }

修改为

public function license_is_valid() { return true; }

WordPress根目录(Root)

  1. index.php:WordPress核心索引文件,即博客输出文件。
  2. license.txt:WordPress GPL许可证文件。
  3. my-hacks.php:定义了博客输出之前处理的追加程序。默认安装中并没有这个文件,但如果存在,它就会被管理页面引用。
  4. readme.html:WordPress安装导言。
  5. wp-atom.php:输出Atom信息聚合内容。
  6. wp-blog-header.php:根据博客参数定义博客页面显示内容。
  7. wp-cron.php
  8. wp-comments-post.php:接收评论,并把其添加到数据库。
  9. wp-commentsrss2.php:用来生成日志评论的RSS2信息聚合内容。
  10. wp-config-sample.php:把WordPress连接到MySQL数据库的示例配置文件。
  11. wp-config.php:这是真正把WordPress连接到MySQL数据库的配置文件。默认安装中虽不包括它,但由于WordPress运行需要这一文件,因此,用户需要编辑这个文件以更改相关设置。
  12. wp-feed.php:根据请求定义feed类型并其返回feed请求文件。
  13. wp-links-opml.php:生成OPML格式的链接(通过WordPress管理菜单添加)列表。
  14. wp-login.php:定义注册用户的登陆页面。
  15. wp-mail.php:用来获取通过邮件提交的博文。这个文件的URL通常被添加到cron任务中,这样cron就会定期检索文件并接收邮件日志。
  16. wp-pass.php:审核受密码保护文章的密码并显示被保护文章。
  17. wp-rdf.php:生成RDF信息聚合内容。
  18. wp-register.php:允许新用户通过联机表单注册用户名。
  19. wp-rss.php:生成RSS信息聚合内容。
  20. wp-rss2.php:生成RSS2信息聚合内容。
  21. wp-settings.php:运行执行前的例行程序,包括检查安装是否正确,使用辅助函数,应用用户插件,初始化执行计时器等等。
  22. wp-trackback.php:处理trackback请求。
  23. wp.php:显示博客日志的简单模板。并没有什么神奇之处,但包括了部分index.php内容。
  24. xmlrpc.php:处理xmlrpc请求。用户无需通过内置的网络管理界面就可发布文章。

wordpress源码解析-目录结构-文件调用关系

WordPress是一个单入口的文件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的。这种做法的好处是显而易见的,这样URL更好看,不必为每一个url新建一个文件。

我们看看wp大致的文件调用是什么样子的。

wordpress可以分为3个阶段,一是初始化阶段,即初始化常量、环境、加载核心文件等等;二是内容处理阶段,即根据用户的请求调用相关函数获取和处理数据,为前端展示准备数据;三是主题应用阶段,在这个阶段,需要展示的数据已经准备完毕,需要根据用户的请求加载相应的主题模板,即对主题进行路由。经过这三各阶段,用户请求的页面就可以完全的展现出来了。从上图可以看到wp的初始化阶段相当的繁琐。

Index.php文件实际上没啥内容. 定义了常量WP_USE_THEMES和加载了文件wp-blog-header.php

<?php  
/*index.php*/  
//该常量定义为false时,不使用主题,站点会显示为空白,为true时,则正常显示。  
define('WP_USE_THEMES', true);  
//加载wp-blog-header.php  
require('./wp-blog-header.php');  
?>

wp–blog-header里面是什么样子呢?

<?php  
/*wp-blog-header.php */  
//wp_did_header变量,相当于一个flag,确保每次刷新时,wp-blog-header.php文件只执行一次。  
if ( !isset($wp_did_header) ) {  
  
    $wp_did_header = true;//置为true,确保只执行一次。  
    //初始化阶段。加载wp-load.php,  
    require_once( dirname(__FILE__) . '/wp-load.php' );  
    //内容处理阶段 wp()位于functon.php中  
    wp();  
    //主题应用阶段。ABSPATH wordpress目录的绝对路径  
    require_once( ABSPATH . WPINC . '/template-loader.php' );  
  
}

wp-blog-header任然很简单,但是可以看到wp的三个明显的阶段,初始化阶段、内容处理阶段、主题应用阶段。

wp-load.php的功能很简单,就是加载wp-config.php. wp-config.php是需要用户自己进行设置的。设置DB设置,密钥,路径,语言等

<?php  
/*wp-load.php 
 */  
  
// 定义常量 wordpress根目录的绝对路径   
define( 'ABSPATH', dirname(__FILE__) . '/' );  
//设置错误报告模式 这个if的分支 差别在E_RECOVERABLE_ERROR ?  
if ( defined('E_RECOVERABLE_ERROR') )  
    error_reporting(E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR);  
else  
    error_reporting(E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING);  
//加载wp-config.php  
if ( file_exists( ABSPATH . 'wp-config.php') ) {  
  
    /** The config file resides in ABSPATH */  
    require_once( ABSPATH . 'wp-config.php' );  
  
} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) {  
  
    /** The config file resides one level above ABSPATH but is not part of another install*/  
    //如果wp-config.php存在于绝对路径的上一级,而且不是另一个wordpress的一部分  
    require_once( dirname(ABSPATH) . '/wp-config.php' );  
  
} else {  
  
    // wp-config.php 不存在时,  
  
    // Set a path for the link to the installer  
    if ( strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false )  
        $path = '';  
    else  
        $path = 'wp-admin/';  
  
    // Die with an error message  
    require_once( ABSPATH . '/wp-includes/class-wp-error.php' );  
    require_once( ABSPATH . '/wp-includes/functions.php' );  
    require_once( ABSPATH . '/wp-includes/plugin.php' );  
    $text_direction = /*WP_I18N_TEXT_DIRECTION*/'从左到右'/*/WP_I18N_TEXT_DIRECTION*/;  
    wp_die(sprintf(/*WP_I18N_NO_CONFIG*/'看起来似乎没有 <code>wp-config.php</code> 文件。我们需要这个文件来让一切开始,可以查看<a href=\'http://codex.wordpress.org/Editing_wp-config.php\'>更多帮助</a>。 那么现在您可以通过这个 Web 界面创建一个 <code>wp-config.php</code> 文件,但并非所有主机都支持,安全的做法是手动创建。</p><p><a href=\'%ssetup-config.php\' class=\'button\'>试试创建一个配置文件</a>'/*/WP_I18N_NO_CONFIG*/, $path), /*WP_I18N_ERROR_TITLE*/'WordPress › 错误'/*/WP_I18N_ERROR_TITLE*/, array('text_direction' => $text_direction));  
}  
?>

来看看wp-config.php是什么样子的。

<?php  
/*wp-config.php */  
  
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //  
/** WordPress 数据库的名称 */  
define('DB_NAME', SAE_MYSQL_DB);  
  
/** MySQL 数据库用户名 */  
define('DB_USER', SAE_MYSQL_USER);  
  
/** MySQL 数据库密码 */  
define('DB_PASSWORD', SAE_MYSQL_PASS);  
  
/** MySQL 主机 */  
define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT);  
  
/** 创建数据表时默认的文字编码 */  
define('DB_CHARSET', 'utf8');  
  
/** 数据库整理类型。如不确定请勿更改 */  
define('DB_COLLATE', '');  
  
define('WP_USE_MULTIPLE_DB', true);  
  
$db_list = array(  
        'write'=> array(  
            array(  
                'db_host' => SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,  
                'db_user'=> SAE_MYSQL_USER,  
                'db_password'=> SAE_MYSQL_PASS,  
                'db_name'=> SAE_MYSQL_DB,  
                'db_charset'=> 'utf8'  
                )  
            ),  
        'read'=> array(  
            array(  
                'db_host' => SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,  
                'db_user'=> SAE_MYSQL_USER,  
                'db_password'=> SAE_MYSQL_PASS,  
                'db_name'=> SAE_MYSQL_DB,  
                'db_charset'=> 'utf8'  
                )  
            ),  
        );  
$global_db_list = $db_list['write'];  
  
/**#@+ 
 * 身份密匙设定。 
 * 
 * 您可以随意写一些字符 
 * 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私钥生成服务}, 
 * 任何修改都会导致 cookie 失效,所有用户必须重新登录。 
 * 
 * @since 2.6.0 
 */  
define('AUTH_KEY',         hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_KEY', SAE_SECRETKEY ));  
define('SECURE_AUTH_KEY',  hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_KEY', SAE_SECRETKEY ));  
define('LOGGED_IN_KEY',    hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_KEY', SAE_SECRETKEY ));  
define('NONCE_KEY',        hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_KEY', SAE_SECRETKEY ));  
define('AUTH_SALT',        hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_SALT', SAE_SECRETKEY ));  
define('SECURE_AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_SALT', SAE_SECRETKEY ));  
define('LOGGED_IN_SALT',   hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_SALT', SAE_SECRETKEY ));  
define('NONCE_SALT',       hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_SALT', SAE_SECRETKEY ));  
  
/**#@-*/  
  
/** 
 * WordPress 数据表前缀。 
 * 
 * 如果您有在同一数据库内安装多个 WordPress 的需求,请为每个 WordPress 设置不同的数据表前缀。 
 * 前缀名只能为数字、字母加下划线。 
 */  
$table_prefix  = 'wp_';  
  
/** 
 * WordPress 语言设置,默认为英语。 
 * 
 * 本项设定能够让 WordPress 显示您需要的语言。 
 * wp-content/languages 内应放置同名的 .mo 语言文件。 
 * 要使用 WordPress 简体中文界面,只需填入 zh_CN。 
 */  
define ('WPLANG', 'zh_CN');  
  
/** 
 * 开发者专用:WordPress 调试模式。 
 * 
 * 将这个值改为“true”,WordPress 将显示所有开发过程中的提示。 
 * 强烈建议插件开发者在开发环境中启用本功能。 
 */  
define('WP_DEBUG', false);  
  
/* 好了!请不要再继续编辑。请保存该文件。 */  
  
/** WordPress 目录的绝对路径。 */  
if ( !defined('ABSPATH') )  
    define('ABSPATH', dirname(__FILE__) . '/');  
  
/** 设置 WordPress 变量和包含文件。 这个文件内容很多啊,分析较困难*/  
require_once(ABSPATH . 'wp-settings.php');