SEO Smart Links - Version 2.0

Version Description

Download this release

Release Info

Developer freediver
Plugin Icon 128x128 SEO Smart Links
Version 2.0
Comparing to
See all releases

Code changes from version 1.9.3 to 2.0

Files changed (4) hide show
  1. i/paypal.gif +0 -0
  2. i/twit.png +0 -0
  3. readme.txt +2 -0
  4. seo-links.php +47 -32
i/paypal.gif ADDED
Binary file
i/twit.png ADDED
Binary file
readme.txt CHANGED
@@ -21,6 +21,8 @@ Everything happens completely transparent, and you can edit the options from the
21
 
22
  Change log:
23
 
 
 
24
 
25
  v1.9.3
26
  - Various improvements and bug fixes
21
 
22
  Change log:
23
 
24
+ v2.0
25
+ - Added the option for case sensitive matching
26
 
27
  v1.9.3
28
  - Various improvements and bug fixes
seo-links.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  /*
4
  Plugin Name: SEO Smart Links
5
- Version: 1.9.3
6
  Plugin URI: http://www.prelovac.com/vladimir/wordpress-plugins/seo-smart-links
7
  Author: Vladimir Prelovac
8
  Author URI: http://www.prelovac.com/vladimir
@@ -11,6 +11,7 @@ Description: SEO Smart Links provides automatic SEO benefits for your site in ad
11
 
12
  // todo It's possible to have option for case insensitive ?
13
  // $count in preg_replace, max links towards same url
 
14
 
15
  // Avoid name collisions.
16
  if ( !class_exists('SEOLinks') ) :
@@ -50,6 +51,8 @@ function SEOLinks_process_text($text, $mode)
50
 
51
  $links=0;
52
 
 
 
53
 
54
  if ($options['onlysingle'] && !(is_single() || is_page()))
55
  return $text;
@@ -63,7 +66,7 @@ function SEOLinks_process_text($text, $mode)
63
 
64
  if (($post->post_type=='page' && !$options['pageself']) || ($post->post_type=='post' && !$options['postself'])) {
65
 
66
- $thistitle=strtolower($post->post_title);
67
  $thisurl=trailingslashit(get_permalink($post->ID));
68
  }
69
  else {
@@ -76,7 +79,10 @@ function SEOLinks_process_text($text, $mode)
76
  $maxlinks=($options['maxlinks']>0) ? $options['maxlinks'] : 0;
77
  $maxsingle=($options['maxsingle']>0) ? $options['maxsingle'] : -1;
78
 
79
- $arrignore=$this->explode_trim(",", strtolower($options['ignore']));
 
 
 
80
 
81
  $text = " $text ";
82
 
@@ -110,13 +116,13 @@ function SEOLinks_process_text($text, $mode)
110
  foreach ($kw_array as $name=>$url)
111
  {
112
 
113
- if ((!$maxlinks || ($links < $maxlinks)) && (trailingslashit($url)!=$thisurl) && !in_array( strtolower($name), $arrignore))
114
  {
115
 
116
  $name= preg_quote($name, '/');
117
 
118
  $replace="<a title=\"$1\" href=\"$url\">$1</a>";
119
- $regexp="/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/imsU"; // this didnt work with unicode
120
  //$regexp="/(?!(?:[^<]+>|[^>]+<\/a>))(?<!\p{L})($name)(?!\p{L})/imsU";
121
  $newtext = preg_replace($regexp, $replace, $text, $maxsingle);
122
  if ($newtext!=$text) {
@@ -145,11 +151,12 @@ function SEOLinks_process_text($text, $mode)
145
  foreach ($posts as $postitem)
146
  {
147
  if ((($options['lposts'] && $postitem->post_type=='post') || ($options['lpages'] && $postitem->post_type=='page')) &&
148
- (!$maxlinks || ($links < $maxlinks)) && (strtolower($postitem->post_title)!=$thistitle) && (!in_array( strtolower($postitem->post_title), $arrignore)) )
149
  {
150
  $name = preg_quote($postitem->post_title, '/');
151
 
152
- $regexp="/(?!(?:[^<]+>|[^>]+<\/a>))($name)/imsU";
 
153
 
154
  $replace='<a title="$1" href="$$$url$$$">$1</a>';
155
 
@@ -176,10 +183,10 @@ function SEOLinks_process_text($text, $mode)
176
 
177
  foreach ($categories as $cat)
178
  {
179
- if ((!$maxlinks || ($links < $maxlinks)) && !in_array( strtolower($cat->name), $arrignore) )
180
  {
181
  $name= preg_quote($cat->name, '/');
182
- $regexp="/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/imsU";
183
  $replace='<a title="$1" href="$$$url$$$">$1</a>';
184
 
185
  $newtext = preg_replace($regexp, $replace, $text, $maxsingle);
@@ -207,10 +214,10 @@ function SEOLinks_process_text($text, $mode)
207
 
208
  foreach ($tags as $tag)
209
  {
210
- if ((!$maxlinks || ($links < $maxlinks)) && !in_array( strtolower($tag->name), $arrignore) )
211
  {
212
  $name = preg_quote($tag->name, '/');
213
- $regexp="/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/imsU";
214
  $replace='<a title="$1" href="$$$url$$$">$1</a>';
215
 
216
  $newtext = preg_replace($regexp, $replace, $text, $maxsingle);
@@ -292,7 +299,8 @@ function SEOLinks_comment_text_filter($text) {
292
  'nofolo' =>'',
293
  'blankn' =>'',
294
  'blanko' =>'',
295
- 'onlysingle' => 'on'
 
296
 
297
  );
298
 
@@ -346,6 +354,7 @@ function SEOLinks_comment_text_filter($text) {
346
  $options['blankn']=$_POST['blankn'];
347
  $options['blanko']=$_POST['blanko'];
348
  $options['onlysingle']=$_POST['onlysingle'];
 
349
 
350
 
351
  update_option($this->SEOLinks_DB_option, $options);
@@ -376,6 +385,7 @@ function SEOLinks_comment_text_filter($text) {
376
  $blankn=$options['blankn']=='on'?'checked':'';
377
  $blanko=$options['blanko']=='on'?'checked':'';
378
  $onlysingle=$options['onlysingle']=='on'?'checked':'';
 
379
 
380
  $nonce=wp_create_nonce( 'seo-smart-links');
381
 
@@ -388,18 +398,17 @@ function SEOLinks_comment_text_filter($text) {
388
  <div id="poststuff" style="margin-top:10px;">
389
 
390
  <div id="sideblock" style="float:right;width:220px;margin-left:10px;">
391
- <h3>Information</h3>
392
  <div id="dbx-content" style="text-decoration:none;">
393
- <img src="$imgpath/home.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/wordpress-plugins/seo-smart-links"> SEO Smart Links Home</a><br /><br />
394
- <img src="$imgpath/help.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/forum"> Plugin Forums</a><br /><br />
395
- <img src="$imgpath/rate.png"><a style="text-decoration:none;" href="http://wordpress.org/extend/plugins/seo-automatic-links/"> Rate SEO Smart Links</a><br /><br />
396
- <img src="$imgpath/more.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/wordpress-plugins"> My WordPress Plugins</a><br /><br />
397
  <br />
398
-
399
- <p align="center">
400
- <img src="$imgpath/p1.png"></p>
401
-
402
- <p> <img src="$imgpath/idea.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/services"> Need a WordPress Expert?</a></p>
403
  </div>
404
  </div>
405
 
@@ -409,13 +418,13 @@ function SEOLinks_comment_text_filter($text) {
409
  <form name="SEOLinks" action="$action_url" method="post">
410
  <input type="hidden" id="_wpnonce" name="_wpnonce" value="$nonce" />
411
  <input type="hidden" name="submitted" value="1" />
412
- <h3>Overview</h3>
413
 
414
  <p>SEO Smart Links can automatically link keywords and phrases in your posts and comments with corresponding posts, pages, categories and tags on your blog.</p>
415
  <p>Further SEO Smart links allows you to set up your own keywords and set of matching URLs.</p>
416
  <p>Finally SEO Smart links allows you to set nofollow attribute and open links in new window.</p>
417
 
418
- <h3>Internal Links</h3>
419
  <p>SEO Smart Links can process your posts, pages and comments in search for keywords to automatically interlink.</p>
420
  <input type="checkbox" name="post" $post/><label for="post"> Posts</label>
421
  <ul>&nbsp;<input type="checkbox" name="postself" $postself/><label for="postself"> Allow links to self</label></ul>
@@ -432,15 +441,20 @@ function SEOLinks_comment_text_filter($text) {
432
  <input type="checkbox" name="lcats" $lcats /><label for="lcats"> Categories</label> (may slow down performance) <br>
433
  <input type="checkbox" name="ltags" $ltags /><label for="ltags"> Tags</label> (may slow down performance) <br>
434
 
435
- <h4>Only single</h4>
436
  <p>To reduce database load you can choose to have SEO SMART links work only on single posts and pages (for example not on main page or archives).</p>
437
  <input type="checkbox" name="onlysingle" $onlysingle /><label for="onlysingle"> Process only single posts and pages</label> <br>
438
 
439
- <h4>Ignore</h4>
 
 
 
440
  <p>You may wish to ignore certain words or phrases from automatic linking. Seperate them by comma.</p>
441
  <input type="text" name="ignore" size="90" value="$ignore"/>
442
- <br><br>
443
- <h3>Custom Keywords</h3>
 
 
444
  <p>Here you can enter manually the extra keywords you want to automaticaly link. Use comma to seperate keywords and add target url at the end. Use a new line for new url and set of keywords. You can have these keywords link to any url, not only your site.</p>
445
  <p>Example:<br />
446
  vladimir prelovac, http://www.prelovac.com/vladimir<br />
@@ -450,13 +464,14 @@ function SEOLinks_comment_text_filter($text) {
450
  <textarea name="customkey" id="customkey" rows="10" cols="90" >$customkey</textarea>
451
  <br><br>
452
 
453
- <h3>Limits</h3>
454
  <p>You can limit the maximum number of links SEO Smart Links will generate per post. Set to 0 for no limit. </p>
455
  Max Links: <input type="text" name="maxlinks" size="2" value="$maxlinks"/>
456
  <p>You can also limit maximum number of links created with the same keyword. Set to 0 for no limit. </p>
457
  Max Single: <input type="text" name="maxsingle" size="2" value="$maxsingle"/>
458
- <br><br>
459
- <h3>External Links</h3>
 
460
  <p>SEO Smart links can open external links in new window and add nofollow attribute.</p>
461
 
462
 
@@ -466,7 +481,7 @@ function SEOLinks_comment_text_filter($text) {
466
  <input type="checkbox" name="blanko" $blanko /><label for="blanko"> Open in new window</label> <br>
467
 
468
 
469
- <div class="submit"><input type="submit" name="Submit" value="Update" class="button-primary" /></div>
470
  </form>
471
  </div>
472
 
2
 
3
  /*
4
  Plugin Name: SEO Smart Links
5
+ Version: 2.0
6
  Plugin URI: http://www.prelovac.com/vladimir/wordpress-plugins/seo-smart-links
7
  Author: Vladimir Prelovac
8
  Author URI: http://www.prelovac.com/vladimir
11
 
12
  // todo It's possible to have option for case insensitive ?
13
  // $count in preg_replace, max links towards same url
14
+ // If possible I'd be interested in having the plugin to not autolink keywords within (ie H1, H2 etc)
15
 
16
  // Avoid name collisions.
17
  if ( !class_exists('SEOLinks') ) :
51
 
52
  $links=0;
53
 
54
+
55
+
56
 
57
  if ($options['onlysingle'] && !(is_single() || is_page()))
58
  return $text;
66
 
67
  if (($post->post_type=='page' && !$options['pageself']) || ($post->post_type=='post' && !$options['postself'])) {
68
 
69
+ $thistitle=$options['casesens'] ? $post->post_title : strtolower($post->post_title);
70
  $thisurl=trailingslashit(get_permalink($post->ID));
71
  }
72
  else {
79
  $maxlinks=($options['maxlinks']>0) ? $options['maxlinks'] : 0;
80
  $maxsingle=($options['maxsingle']>0) ? $options['maxsingle'] : -1;
81
 
82
+ $arrignore=$this->explode_trim(",", ($options['ignore']));
83
+
84
+ $reg_post = $options['casesens'] ? '/(?!(?:[^<]+>|[^>]+<\/a>))($name)/msU' : '/(?!(?:[^<]+>|[^>]+<\/a>))($name)/imsU';
85
+ $reg = $options['casesens'] ? '/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/msU' : '/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/imsU';
86
 
87
  $text = " $text ";
88
 
116
  foreach ($kw_array as $name=>$url)
117
  {
118
 
119
+ if ((!$maxlinks || ($links < $maxlinks)) && (trailingslashit($url)!=$thisurl) && !in_array( $options['casesens'] ? $name : strtolower($name), $arrignore))
120
  {
121
 
122
  $name= preg_quote($name, '/');
123
 
124
  $replace="<a title=\"$1\" href=\"$url\">$1</a>";
125
+ $regexp=str_replace('$name', $name, $reg);
126
  //$regexp="/(?!(?:[^<]+>|[^>]+<\/a>))(?<!\p{L})($name)(?!\p{L})/imsU";
127
  $newtext = preg_replace($regexp, $replace, $text, $maxsingle);
128
  if ($newtext!=$text) {
151
  foreach ($posts as $postitem)
152
  {
153
  if ((($options['lposts'] && $postitem->post_type=='post') || ($options['lpages'] && $postitem->post_type=='page')) &&
154
+ (!$maxlinks || ($links < $maxlinks)) && (($options['casesens'] ? $postitem->post_title : strtolower($postitem->post_title))!=$thistitle) && (!in_array( ($options['casesens'] ? $postitem->post_title : strtolower($postitem->post_title)), $arrignore)) )
155
  {
156
  $name = preg_quote($postitem->post_title, '/');
157
 
158
+ $regexp=str_replace('$name', $name, $reg_post);
159
+
160
 
161
  $replace='<a title="$1" href="$$$url$$$">$1</a>';
162
 
183
 
184
  foreach ($categories as $cat)
185
  {
186
+ if ((!$maxlinks || ($links < $maxlinks)) && !in_array( $options['casesens'] ? $cat->name : strtolower($cat->name), $arrignore) )
187
  {
188
  $name= preg_quote($cat->name, '/');
189
+ $regexp=str_replace('$name', $name, $reg); ;
190
  $replace='<a title="$1" href="$$$url$$$">$1</a>';
191
 
192
  $newtext = preg_replace($regexp, $replace, $text, $maxsingle);
214
 
215
  foreach ($tags as $tag)
216
  {
217
+ if ((!$maxlinks || ($links < $maxlinks)) && !in_array( $options['casesens'] ? $tag->name : strtolower($tag->name), $arrignore) )
218
  {
219
  $name = preg_quote($tag->name, '/');
220
+ $regexp=str_replace('$name', $name, $reg); ;
221
  $replace='<a title="$1" href="$$$url$$$">$1</a>';
222
 
223
  $newtext = preg_replace($regexp, $replace, $text, $maxsingle);
299
  'nofolo' =>'',
300
  'blankn' =>'',
301
  'blanko' =>'',
302
+ 'onlysingle' => 'on',
303
+ 'casesens' =>''
304
 
305
  );
306
 
354
  $options['blankn']=$_POST['blankn'];
355
  $options['blanko']=$_POST['blanko'];
356
  $options['onlysingle']=$_POST['onlysingle'];
357
+ $options['casesens']=$_POST['casesens'];
358
 
359
 
360
  update_option($this->SEOLinks_DB_option, $options);
385
  $blankn=$options['blankn']=='on'?'checked':'';
386
  $blanko=$options['blanko']=='on'?'checked':'';
387
  $onlysingle=$options['onlysingle']=='on'?'checked':'';
388
+ $casesens=$options['casesens']=='on'?'checked':'';
389
 
390
  $nonce=wp_create_nonce( 'seo-smart-links');
391
 
398
  <div id="poststuff" style="margin-top:10px;">
399
 
400
  <div id="sideblock" style="float:right;width:220px;margin-left:10px;">
401
+ <h2>Information</h2>
402
  <div id="dbx-content" style="text-decoration:none;">
403
+ <img src="$imgpath/home.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/wordpress-plugins/seo-smart-links"> SEO Smart Links Home</a><br />
404
+ <img src="$imgpath/rate.png"><a style="text-decoration:none;" href="http://wordpress.org/extend/plugins/seo-automatic-links/"> Rate this plugin</a><br />
405
+ <img src="$imgpath/help.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/forum"> Support and Help</a><br />
 
406
  <br />
407
+ <a style="text-decoration:none;" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2567254"><img src="$imgpath/paypal.gif"></a>
408
+ <br /><br />
409
+ <img src="$imgpath/more.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/wordpress-plugins"> Cool WordPress Plugins</a><br />
410
+ <img src="$imgpath/twit.png"><a style="text-decoration:none;" href="http://twitter.com/vprelovac"> Follow updates on Twitter</a><br />
411
+ <img src="$imgpath/idea.png"><a style="text-decoration:none;" href="http://www.prelovac.com/vladimir/services"> Need a WordPress Expert?</a>
412
  </div>
413
  </div>
414
 
418
  <form name="SEOLinks" action="$action_url" method="post">
419
  <input type="hidden" id="_wpnonce" name="_wpnonce" value="$nonce" />
420
  <input type="hidden" name="submitted" value="1" />
421
+ <h2>Overview</h2>
422
 
423
  <p>SEO Smart Links can automatically link keywords and phrases in your posts and comments with corresponding posts, pages, categories and tags on your blog.</p>
424
  <p>Further SEO Smart links allows you to set up your own keywords and set of matching URLs.</p>
425
  <p>Finally SEO Smart links allows you to set nofollow attribute and open links in new window.</p>
426
 
427
+ <h2>Internal Links</h2>
428
  <p>SEO Smart Links can process your posts, pages and comments in search for keywords to automatically interlink.</p>
429
  <input type="checkbox" name="post" $post/><label for="post"> Posts</label>
430
  <ul>&nbsp;<input type="checkbox" name="postself" $postself/><label for="postself"> Allow links to self</label></ul>
441
  <input type="checkbox" name="lcats" $lcats /><label for="lcats"> Categories</label> (may slow down performance) <br>
442
  <input type="checkbox" name="ltags" $ltags /><label for="ltags"> Tags</label> (may slow down performance) <br>
443
 
444
+ <h2>Settings</h2>
445
  <p>To reduce database load you can choose to have SEO SMART links work only on single posts and pages (for example not on main page or archives).</p>
446
  <input type="checkbox" name="onlysingle" $onlysingle /><label for="onlysingle"> Process only single posts and pages</label> <br>
447
 
448
+ <p>Set whether matching should be case sensitive.</p>
449
+ <input type="checkbox" name="casesens" $casesens /><label for="casesens"> Case sensitive matching</label> <br>
450
+
451
+ <h4>Ignore keywords</h4>
452
  <p>You may wish to ignore certain words or phrases from automatic linking. Seperate them by comma.</p>
453
  <input type="text" name="ignore" size="90" value="$ignore"/>
454
+ <br><br>
455
+
456
+
457
+ <h4>Custom Keywords</h4>
458
  <p>Here you can enter manually the extra keywords you want to automaticaly link. Use comma to seperate keywords and add target url at the end. Use a new line for new url and set of keywords. You can have these keywords link to any url, not only your site.</p>
459
  <p>Example:<br />
460
  vladimir prelovac, http://www.prelovac.com/vladimir<br />
464
  <textarea name="customkey" id="customkey" rows="10" cols="90" >$customkey</textarea>
465
  <br><br>
466
 
467
+ <h4>Limits</h4>
468
  <p>You can limit the maximum number of links SEO Smart Links will generate per post. Set to 0 for no limit. </p>
469
  Max Links: <input type="text" name="maxlinks" size="2" value="$maxlinks"/>
470
  <p>You can also limit maximum number of links created with the same keyword. Set to 0 for no limit. </p>
471
  Max Single: <input type="text" name="maxsingle" size="2" value="$maxsingle"/>
472
+ <br><br>
473
+
474
+ <h4>External Links</h4>
475
  <p>SEO Smart links can open external links in new window and add nofollow attribute.</p>
476
 
477
 
481
  <input type="checkbox" name="blanko" $blanko /><label for="blanko"> Open in new window</label> <br>
482
 
483
 
484
+ <div class="submit"><input type="submit" name="Submit" value="Update options" class="button-primary" /></div>
485
  </form>
486
  </div>
487