Version Description
Download this release
Release Info
| Developer | freediver |
| Plugin | |
| Version | 2.1 |
| Comparing to | |
| See all releases | |
Code changes from version 2.0 to 2.1
- readme.txt +6 -1
- seo-links.php +61 -46
readme.txt
CHANGED
|
@@ -19,8 +19,13 @@ Further SEO Smart links allows you to set up your own keywords and set of matchi
|
|
| 19 |
|
| 20 |
Everything happens completely transparent, and you can edit the options from the administration settings panel.
|
| 21 |
|
| 22 |
-
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
v2.0
|
| 25 |
- Added the option for case sensitive matching
|
| 26 |
|
| 19 |
|
| 20 |
Everything happens completely transparent, and you can edit the options from the administration settings panel.
|
| 21 |
|
| 22 |
+
What is new:
|
| 23 |
|
| 24 |
+
|
| 25 |
+
v2.1
|
| 26 |
+
- Performance optimization and new option to link to cats and tags with used at least n times (thanks Dominik Deobald!)
|
| 27 |
+
|
| 28 |
+
|
| 29 |
v2.0
|
| 30 |
- Added the option for case sensitive matching
|
| 31 |
|
seo-links.php
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
|
| 3 |
/*
|
| 4 |
Plugin Name: SEO Smart Links
|
| 5 |
-
Version: 2.
|
| 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
|
| 9 |
Description: SEO Smart Links provides automatic SEO benefits for your site in addition to custom keyword lists, nofollow and much more.
|
| 10 |
*/
|
|
@@ -75,14 +75,19 @@ function SEOLinks_process_text($text, $mode)
|
|
| 75 |
}
|
| 76 |
|
| 77 |
}
|
|
|
|
| 78 |
|
| 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 |
|
|
@@ -118,18 +123,18 @@ function SEOLinks_process_text($text, $mode)
|
|
| 118 |
|
| 119 |
if ((!$maxlinks || ($links < $maxlinks)) && (trailingslashit($url)!=$thisurl) && !in_array( $options['casesens'] ? $name : strtolower($name), $arrignore))
|
| 120 |
{
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
}
|
| 134 |
}
|
| 135 |
}
|
|
@@ -139,8 +144,6 @@ function SEOLinks_process_text($text, $mode)
|
|
| 139 |
if ($options['lposts'] || $options['lpages'])
|
| 140 |
{
|
| 141 |
if ( !$posts = wp_cache_get( 'seo-links-posts', 'seo-smart-links' ) ) {
|
| 142 |
-
|
| 143 |
-
|
| 144 |
$query="SELECT post_title, ID, post_type FROM $wpdb->posts WHERE post_status = 'publish' AND LENGTH(post_title)>3 ORDER BY LENGTH(post_title) DESC";
|
| 145 |
$posts = $wpdb->get_results($query);
|
| 146 |
|
|
@@ -153,19 +156,21 @@ function SEOLinks_process_text($text, $mode)
|
|
| 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 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
|
|
|
|
|
|
|
|
|
| 160 |
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
}
|
| 169 |
}
|
| 170 |
}
|
| 171 |
}
|
|
@@ -175,7 +180,7 @@ function SEOLinks_process_text($text, $mode)
|
|
| 175 |
{
|
| 176 |
if ( !$categories = wp_cache_get( 'seo-links-categories', 'seo-smart-links' ) ) {
|
| 177 |
|
| 178 |
-
$query="SELECT $wpdb->terms.name, $wpdb->terms.term_id FROM $wpdb->terms LEFT JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id WHERE $wpdb->term_taxonomy.taxonomy = 'category' AND LENGTH($wpdb->terms.name)>3
|
| 179 |
$categories = $wpdb->get_results($query);
|
| 180 |
|
| 181 |
wp_cache_add( 'seo-links-categories', $categories, 'seo-smart-links',86400 );
|
|
@@ -185,6 +190,7 @@ function SEOLinks_process_text($text, $mode)
|
|
| 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>';
|
|
@@ -194,8 +200,8 @@ function SEOLinks_process_text($text, $mode)
|
|
| 194 |
$url = (get_category_link($cat->term_id));
|
| 195 |
$links++;
|
| 196 |
$text=str_replace('$$$url$$$', $url, $newtext);
|
| 197 |
-
}
|
| 198 |
-
|
| 199 |
}
|
| 200 |
}
|
| 201 |
}
|
|
@@ -203,12 +209,11 @@ function SEOLinks_process_text($text, $mode)
|
|
| 203 |
// tags
|
| 204 |
if ($options['ltags'])
|
| 205 |
{
|
| 206 |
-
|
| 207 |
if ( !$tags = wp_cache_get( 'seo-links-tags', 'seo-smart-links' ) ) {
|
| 208 |
|
| 209 |
-
$query="SELECT $wpdb->terms.name, $wpdb->terms.term_id FROM $wpdb->terms LEFT JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id WHERE $wpdb->term_taxonomy.taxonomy = 'post_tag' AND LENGTH($wpdb->terms.name)>3
|
| 210 |
$tags = $wpdb->get_results($query);
|
| 211 |
-
|
| 212 |
wp_cache_add( 'seo-links-tags', $tags, 'seo-smart-links',86400 );
|
| 213 |
}
|
| 214 |
|
|
@@ -216,16 +221,18 @@ function SEOLinks_process_text($text, $mode)
|
|
| 216 |
{
|
| 217 |
if ((!$maxlinks || ($links < $maxlinks)) && !in_array( $options['casesens'] ? $tag->name : strtolower($tag->name), $arrignore) )
|
| 218 |
{
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
|
|
|
|
|
|
| 229 |
}
|
| 230 |
}
|
| 231 |
}
|
|
@@ -294,6 +301,7 @@ function SEOLinks_comment_text_filter($text) {
|
|
| 294 |
'ignore' => 'about,',
|
| 295 |
'maxlinks' => 3,
|
| 296 |
'maxsingle' => 1,
|
|
|
|
| 297 |
'customkey' => '',
|
| 298 |
'nofoln' =>'',
|
| 299 |
'nofolo' =>'',
|
|
@@ -348,6 +356,7 @@ function SEOLinks_comment_text_filter($text) {
|
|
| 348 |
$options['ignore']=$_POST['ignore'];
|
| 349 |
$options['maxlinks']=(int) $_POST['maxlinks'];
|
| 350 |
$options['maxsingle']=(int) $_POST['maxsingle'];
|
|
|
|
| 351 |
$options['customkey']=$_POST['customkey'];
|
| 352 |
$options['nofoln']=$_POST['nofoln'];
|
| 353 |
$options['nofolo']=$_POST['nofolo'];
|
|
@@ -379,6 +388,7 @@ function SEOLinks_comment_text_filter($text) {
|
|
| 379 |
$ignore=$options['ignore'];
|
| 380 |
$maxlinks=$options['maxlinks'];
|
| 381 |
$maxsingle=$options['maxsingle'];
|
|
|
|
| 382 |
$customkey=stripslashes($options['customkey']);
|
| 383 |
$nofoln=$options['nofoln']=='on'?'checked':'';
|
| 384 |
$nofolo=$options['nofolo']=='on'?'checked':'';
|
|
@@ -386,6 +396,8 @@ function SEOLinks_comment_text_filter($text) {
|
|
| 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 |
|
|
@@ -440,6 +452,9 @@ function SEOLinks_comment_text_filter($text) {
|
|
| 440 |
<input type="checkbox" name="lpages" $lpages /><label for="lpages"> Pages</label> <br>
|
| 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>
|
| 2 |
|
| 3 |
/*
|
| 4 |
Plugin Name: SEO Smart Links
|
| 5 |
+
Version: 2.1
|
| 6 |
Plugin URI: http://www.prelovac.com/vladimir/wordpress-plugins/seo-smart-links
|
| 7 |
+
Author: Vladimir Prelovac</a>
|
| 8 |
Author URI: http://www.prelovac.com/vladimir
|
| 9 |
Description: SEO Smart Links provides automatic SEO benefits for your site in addition to custom keyword lists, nofollow and much more.
|
| 10 |
*/
|
| 75 |
}
|
| 76 |
|
| 77 |
}
|
| 78 |
+
|
| 79 |
|
| 80 |
$maxlinks=($options['maxlinks']>0) ? $options['maxlinks'] : 0;
|
| 81 |
$maxsingle=($options['maxsingle']>0) ? $options['maxsingle'] : -1;
|
| 82 |
+
$minusage = ($options['minusage']>0) ? $options['minusage'] : 1;
|
| 83 |
|
| 84 |
$arrignore=$this->explode_trim(",", ($options['ignore']));
|
| 85 |
|
| 86 |
+
// $reg_post = $options['casesens'] ? '/(?!(?:[^<]+>|[^>]+<\/a>))($name)/msU' : '/(?!(?:[^<]+>|[^>]+<\/a>))($name)/imsU';
|
| 87 |
+
// $reg = $options['casesens'] ? '/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/msU' : '/(?!(?:[^<]+>|[^>]+<\/a>))\b($name)\b/imsU';
|
| 88 |
+
$reg_post = $options['casesens'] ? '/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))($name)/msU' : '/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))($name)/imsU';
|
| 89 |
+
$reg = $options['casesens'] ? '/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))\b($name)\b/msU' : '/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))\b($name)\b/imsU';
|
| 90 |
+
$strpos_fnc = $options['casesens'] ? 'strpos' : 'stripos';
|
| 91 |
|
| 92 |
$text = " $text ";
|
| 93 |
|
| 123 |
|
| 124 |
if ((!$maxlinks || ($links < $maxlinks)) && (trailingslashit($url)!=$thisurl) && !in_array( $options['casesens'] ? $name : strtolower($name), $arrignore))
|
| 125 |
{
|
| 126 |
+
if ($strpos_fnc($text, $name) !== false) { // credit to Dominik Deobald
|
| 127 |
+
$name= preg_quote($name, '/');
|
| 128 |
+
|
| 129 |
+
$replace="<a title=\"$1\" href=\"$url\">$1</a>";
|
| 130 |
+
$regexp=str_replace('$name', $name, $reg);
|
| 131 |
+
//$regexp="/(?!(?:[^<]+>|[^>]+<\/a>))(?<!\p{L})($name)(?!\p{L})/imsU";
|
| 132 |
+
$newtext = preg_replace($regexp, $replace, $text, $maxsingle);
|
| 133 |
+
if ($newtext!=$text) {
|
| 134 |
+
$links++;
|
| 135 |
+
$text=$newtext;
|
| 136 |
+
}
|
| 137 |
+
}
|
| 138 |
}
|
| 139 |
}
|
| 140 |
}
|
| 144 |
if ($options['lposts'] || $options['lpages'])
|
| 145 |
{
|
| 146 |
if ( !$posts = wp_cache_get( 'seo-links-posts', 'seo-smart-links' ) ) {
|
|
|
|
|
|
|
| 147 |
$query="SELECT post_title, ID, post_type FROM $wpdb->posts WHERE post_status = 'publish' AND LENGTH(post_title)>3 ORDER BY LENGTH(post_title) DESC";
|
| 148 |
$posts = $wpdb->get_results($query);
|
| 149 |
|
| 156 |
if ((($options['lposts'] && $postitem->post_type=='post') || ($options['lpages'] && $postitem->post_type=='page')) &&
|
| 157 |
(!$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)) )
|
| 158 |
{
|
| 159 |
+
if ($strpos_fnc($text, $postitem->post_title) !== false) { // credit to Dominik Deobald
|
| 160 |
+
$name = preg_quote($postitem->post_title, '/');
|
| 161 |
+
|
| 162 |
+
$regexp=str_replace('$name', $name, $reg_post);
|
| 163 |
+
|
| 164 |
+
|
| 165 |
+
$replace='<a title="$1" href="$$$url$$$">$1</a>';
|
| 166 |
|
| 167 |
+
$newtext = preg_replace($regexp, $replace, $text, $maxsingle);
|
| 168 |
+
if ($newtext!=$text) {
|
| 169 |
+
$url = get_permalink($postitem->ID);
|
| 170 |
+
$links++;
|
| 171 |
+
$text=str_replace('$$$url$$$', $url, $newtext);
|
| 172 |
+
}
|
| 173 |
+
}
|
|
|
|
| 174 |
}
|
| 175 |
}
|
| 176 |
}
|
| 180 |
{
|
| 181 |
if ( !$categories = wp_cache_get( 'seo-links-categories', 'seo-smart-links' ) ) {
|
| 182 |
|
| 183 |
+
$query="SELECT $wpdb->terms.name, $wpdb->terms.term_id FROM $wpdb->terms LEFT JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id WHERE $wpdb->term_taxonomy.taxonomy = 'category' AND LENGTH($wpdb->terms.name)>3 AND $wpdb->term_taxonomy.count >= $minusage ORDER BY LENGTH($wpdb->terms.name) DESC";
|
| 184 |
$categories = $wpdb->get_results($query);
|
| 185 |
|
| 186 |
wp_cache_add( 'seo-links-categories', $categories, 'seo-smart-links',86400 );
|
| 190 |
{
|
| 191 |
if ((!$maxlinks || ($links < $maxlinks)) && !in_array( $options['casesens'] ? $cat->name : strtolower($cat->name), $arrignore) )
|
| 192 |
{
|
| 193 |
+
if ($strpos_fnc($text, $cat->name) !== false) { // credit to Dominik Deobald
|
| 194 |
$name= preg_quote($cat->name, '/');
|
| 195 |
$regexp=str_replace('$name', $name, $reg); ;
|
| 196 |
$replace='<a title="$1" href="$$$url$$$">$1</a>';
|
| 200 |
$url = (get_category_link($cat->term_id));
|
| 201 |
$links++;
|
| 202 |
$text=str_replace('$$$url$$$', $url, $newtext);
|
| 203 |
+
}
|
| 204 |
+
}
|
| 205 |
}
|
| 206 |
}
|
| 207 |
}
|
| 209 |
// tags
|
| 210 |
if ($options['ltags'])
|
| 211 |
{
|
|
|
|
| 212 |
if ( !$tags = wp_cache_get( 'seo-links-tags', 'seo-smart-links' ) ) {
|
| 213 |
|
| 214 |
+
$query="SELECT $wpdb->terms.name, $wpdb->terms.term_id FROM $wpdb->terms LEFT JOIN $wpdb->term_taxonomy ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id WHERE $wpdb->term_taxonomy.taxonomy = 'post_tag' AND LENGTH($wpdb->terms.name)>3 AND $wpdb->term_taxonomy.count >= $minusage ORDER BY LENGTH($wpdb->terms.name) DESC";
|
| 215 |
$tags = $wpdb->get_results($query);
|
| 216 |
+
|
| 217 |
wp_cache_add( 'seo-links-tags', $tags, 'seo-smart-links',86400 );
|
| 218 |
}
|
| 219 |
|
| 221 |
{
|
| 222 |
if ((!$maxlinks || ($links < $maxlinks)) && !in_array( $options['casesens'] ? $tag->name : strtolower($tag->name), $arrignore) )
|
| 223 |
{
|
| 224 |
+
if ($strpos_fnc($text, $tag->name) !== false) { // credit to Dominik Deobald
|
| 225 |
+
$name = preg_quote($tag->name, '/');
|
| 226 |
+
$regexp=str_replace('$name', $name, $reg); ;
|
| 227 |
+
$replace='<a title="$1" href="$$$url$$$">$1</a>';
|
| 228 |
+
|
| 229 |
+
$newtext = preg_replace($regexp, $replace, $text, $maxsingle);
|
| 230 |
+
if ($newtext!=$text) {
|
| 231 |
+
$url = (get_tag_link($tag->term_id));
|
| 232 |
+
$links++;
|
| 233 |
+
$text=str_replace('$$$url$$$', $url, $newtext);
|
| 234 |
+
}
|
| 235 |
+
}
|
| 236 |
}
|
| 237 |
}
|
| 238 |
}
|
| 301 |
'ignore' => 'about,',
|
| 302 |
'maxlinks' => 3,
|
| 303 |
'maxsingle' => 1,
|
| 304 |
+
'minusage' => 1,
|
| 305 |
'customkey' => '',
|
| 306 |
'nofoln' =>'',
|
| 307 |
'nofolo' =>'',
|
| 356 |
$options['ignore']=$_POST['ignore'];
|
| 357 |
$options['maxlinks']=(int) $_POST['maxlinks'];
|
| 358 |
$options['maxsingle']=(int) $_POST['maxsingle'];
|
| 359 |
+
$options['minusage']=(int) $_POST['minusage']; // credit to Dominik Deobald
|
| 360 |
$options['customkey']=$_POST['customkey'];
|
| 361 |
$options['nofoln']=$_POST['nofoln'];
|
| 362 |
$options['nofolo']=$_POST['nofolo'];
|
| 388 |
$ignore=$options['ignore'];
|
| 389 |
$maxlinks=$options['maxlinks'];
|
| 390 |
$maxsingle=$options['maxsingle'];
|
| 391 |
+
$minusage=$options['minusage'];
|
| 392 |
$customkey=stripslashes($options['customkey']);
|
| 393 |
$nofoln=$options['nofoln']=='on'?'checked':'';
|
| 394 |
$nofolo=$options['nofolo']=='on'?'checked':'';
|
| 396 |
$blanko=$options['blanko']=='on'?'checked':'';
|
| 397 |
$onlysingle=$options['onlysingle']=='on'?'checked':'';
|
| 398 |
$casesens=$options['casesens']=='on'?'checked':'';
|
| 399 |
+
|
| 400 |
+
if (!is_numeric($minusage)) $minusage = 1;
|
| 401 |
|
| 402 |
$nonce=wp_create_nonce( 'seo-smart-links');
|
| 403 |
|
| 452 |
<input type="checkbox" name="lpages" $lpages /><label for="lpages"> Pages</label> <br>
|
| 453 |
<input type="checkbox" name="lcats" $lcats /><label for="lcats"> Categories</label> (may slow down performance) <br>
|
| 454 |
<input type="checkbox" name="ltags" $ltags /><label for="ltags"> Tags</label> (may slow down performance) <br>
|
| 455 |
+
<br>
|
| 456 |
+
Link tags and categories that have been used at least <input type="text" name="minusage" size="2" value="$minusage"/> times.
|
| 457 |
+
<br>
|
| 458 |
|
| 459 |
<h2>Settings</h2>
|
| 460 |
<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>
|
