改造SEO Smart Links

SEO Smart Links能够自动给blog中的关键词添加连接,但是也会给高亮的code代码添加连接,并且我使用的syntaxhighlighter插件在处理高亮code时候也和seo smart link配合有问题,把smart link添加的链接html代码直接显示出来,非常难看.虽然可以再选项中选择排除对h1,h2这样的标签进行排除,但是没有对其他的排除选项,分两部分实现,第一部分先给需要排除的标签内的内容添加特殊标识

if ($options['excludeheading'] == "on") {
		//Here insert special characters
		$text = preg_replace('%(<h.*?>)(.*?)(</h.*?>)%sie', "'\\1'.insertspecialchars('\\2').'\\3'", $text);
	}

在后面添加一行代码:$text = preg_replace(‘%(\【code.*?\】)(.*?)(\【\/code\】)%sie’, “‘\\1’.insertspecialchars(‘\\2’).’\\3′”, $text),把【替换成[,类推要不blog没法正常显示,然后再最后替换关键词链接后把刚才的特使标识删除:

if ($options['excludeheading'] == "on") {
		//Here insert special characters
		$text = preg_replace('%(<h.*?>)(.*?)(</h.*?>)%sie', "'\\1'.removespecialchars('\\2').'\\3'", $text);	}

后面添加:$text = preg_replace(‘%(\【code.*?\】)(.*?)(\【\/code\】)%sie’, “‘\\1’.removespecialchars(‘\\2’).’\\3′”, $text).

原理是SEO SMART LINK在处理特使的标记端是,吧这部分标记内部的所有文本都用特使的html标记分隔开,替换的时候就不会正则出来,替换后再把所有的特殊标记都去掉.

但是这样更改后还是没有反应,后来发现syntaxhighlighter在添加filter的时候把自己的特权设置的很高:

add_filter( 'the_content', array(&$this, 'parse_shortcodes'), 7 );

但是SEO SMART LINK在添加filter特权要低一些,这样文本就先被syntaxhighlighter处理过了:

add_filter('the_content',  array(&$this, 'SEOLinks_the_content_filter'), 10);

把10调整成5即可.

PS:首先学习一下php的正则表达式.preg_replace(正字表达式,准备把正则表达替换成的内容,替换文本)是php的正则替换函数.’%()(.*?)()%sie’中开始的%和结尾的%sie是特使的正则开始和结尾的标志,使用这样的开始和结尾才能使用”‘\\1’.removespecialchars(‘\\2’).’\\3′”这样简单的方式快速组合出中间被替换而开始和结尾都没有变化的字符串.

Leave a Reply

Your email address will not be published. Required fields are marked *