Yet Another Related Posts Plugin (YARPP) - Version 2.0.4

Version Description

Download this release

Release Info

Developer mitchoyoshitaka
Plugin Icon 128x128 Yet Another Related Posts Plugin (YARPP)
Version 2.0.4
Comparing to
See all releases

Code changes from version 2.0.1 to 2.0.4

Files changed (5) hide show
  1. includes.php +57 -19
  2. magic.php +14 -12
  3. options.php +1 -1
  4. readme.txt +9 -2
  5. yarpp.php +2 -2
includes.php CHANGED
@@ -31,7 +31,7 @@ function yarpp_enabled() {
31
global $wpdb;
32
$indexdata = $wpdb->get_results("show index from $wpdb->posts");
33
foreach ($indexdata as $index) {
34
- if ($index->Key_name == 'post_related') return 1;
35
}
36
return 0;
37
}
@@ -43,15 +43,17 @@ function yarpp_activate() {
43
add_option('yarpp_'.$option,$yarpp_options[$option]);
44
}
45
if (!yarpp_enabled()) {
46
- $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `post_related` ( `post_name` , `post_content` )");
47
}
48
- add_option('yarpp_version','2.0.1');
49
- update_option('yarpp_version','2.0.1');
50
return 1;
51
}
52
53
function yarpp_upgrade_check() {
54
- global $yarpp_value_options, $yarpp_binary_options;
55
56
if (get_option('threshold') and get_option('limit') and get_option('len')) {
57
yarpp_activate(); // just to make sure, in case the plugin was just replaced and not deactivated / activated
@@ -60,7 +62,7 @@ function yarpp_upgrade_check() {
60
update_option('yarpp_version','1.5');
61
}
62
63
- if (get_option('yarpp_version') < 2.0.1) {
64
foreach (array_keys($yarpp_value_options) as $option) {
65
if (!get_option('yarpp_'.$option))
66
add_option('yarpp_'.$option,$yarpp_value_options[$option]);
@@ -71,7 +73,26 @@ function yarpp_upgrade_check() {
71
}
72
73
echo '<div id="message" class="updated fade" style="background-color: rgb(207, 235, 247);"><h3>An important message from YARPP:</h3><p>Thank you for upgrading to YARPP 2.0. YARPP 2.0 adds the much requested ability to limit related entry results by certain tags or categories. 2.0 also brings more fine tuned control of the magic algorithm, letting you specify how the algorithm should consider or not consider entry content, titles, tags, and categories. Make sure to adjust the new settings to your liking and perhaps readjust your threshold.</p><p>For more information, check out the <a href="http://mitcho.com/code/yarpp/">YARPP documentation</a>. (This message will not be displayed again.)</p></div>';
74
- update_option('yarpp_version','2.0.1');
75
}
76
77
}
@@ -82,7 +103,7 @@ function yarpp_admin_menu() {
82
}
83
84
function yarpp_options_page() {
85
- require('yet-another-related-posts-plugin/options.php');
86
}
87
88
// This function was written by tyok
@@ -140,32 +161,49 @@ function yarpp_white($filter) {
140
141
/* FYI, apply_filters_if_white was used here to avoid a loop in apply_filters('the_content') > yarpp_default() > yarpp_related() > current_post_keywords() > apply_filters('the_content').*/
142
143
- function apply_filters_if_white($tag, $string) {
144
- global $wp_filter, $merged_filters, $yarpp_blacklist;
145
146
- if ( !isset( $merged_filters[ $tag ] ) )
147
- merge_filters($tag);
148
149
- if ( !isset($wp_filter[$tag]) )
150
- return $string;
151
152
reset( $wp_filter[ $tag ] );
153
154
- $args = func_get_args();
155
156
do{
157
foreach( (array) current($wp_filter[$tag]) as $the_ ) {
158
if ( !is_null($the_['function'])
159
and yarpp_white($the_['function'])){ // HACK
160
- $args[1] = $string;
161
- $oldstring = $string;
162
- $string = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
163
}
164
}
165
166
} while ( next($wp_filter[$tag]) !== false );
167
168
- return $string;
169
}
170
171
// upgrade to 1.5!
31
global $wpdb;
32
$indexdata = $wpdb->get_results("show index from $wpdb->posts");
33
foreach ($indexdata as $index) {
34
+ if ($index->Key_name == 'yarpp_title') return 1;
35
}
36
return 0;
37
}
43
add_option('yarpp_'.$option,$yarpp_options[$option]);
44
}
45
if (!yarpp_enabled()) {
46
+ // $wpdb->query("ALTER TABLE `wp_posts` DROP INDEX `yarpp_cache`");
47
+ $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title`)");
48
+ $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content`)");
49
}
50
+ add_option('yarpp_version','2.04');
51
+ update_option('yarpp_version','2.04');
52
return 1;
53
}
54
55
function yarpp_upgrade_check() {
56
+ global $wpdb, $yarpp_value_options, $yarpp_binary_options;
57
58
if (get_option('threshold') and get_option('limit') and get_option('len')) {
59
yarpp_activate(); // just to make sure, in case the plugin was just replaced and not deactivated / activated
62
update_option('yarpp_version','1.5');
63
}
64
65
+ if (get_option('yarpp_version') < 2) {
66
foreach (array_keys($yarpp_value_options) as $option) {
67
if (!get_option('yarpp_'.$option))
68
add_option('yarpp_'.$option,$yarpp_value_options[$option]);
73
}
74
75
echo '<div id="message" class="updated fade" style="background-color: rgb(207, 235, 247);"><h3>An important message from YARPP:</h3><p>Thank you for upgrading to YARPP 2.0. YARPP 2.0 adds the much requested ability to limit related entry results by certain tags or categories. 2.0 also brings more fine tuned control of the magic algorithm, letting you specify how the algorithm should consider or not consider entry content, titles, tags, and categories. Make sure to adjust the new settings to your liking and perhaps readjust your threshold.</p><p>For more information, check out the <a href="http://mitcho.com/code/yarpp/">YARPP documentation</a>. (This message will not be displayed again.)</p></div>';
76
+ update_option('yarpp_version','2.0');
77
+ }
78
+
79
+ if (get_option('yarpp_version') < 2.02) {
80
+ update_option('yarpp_version','2.02');
81
+ }
82
+
83
+ if (get_option('yarpp_version') < 2.03) {
84
+ $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title`)");
85
+ $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content`)"); update_option('yarpp_version','2.03');
86
+ }
87
+
88
+ if (get_option('yarpp_version') < 2.04) {
89
+ update_option('yarpp_version','2.04');
90
+ }
91
+
92
+ // just in case, try to add the index one more time.
93
+ if (!yarpp_enabled()) {
94
+ $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title`)");
95
+ $wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content`)");
96
}
97
98
}
103
}
104
105
function yarpp_options_page() {
106
+ require(str_replace('includes.php','options.php',__FILE__));
107
}
108
109
// This function was written by tyok
161
162
/* FYI, apply_filters_if_white was used here to avoid a loop in apply_filters('the_content') > yarpp_default() > yarpp_related() > current_post_keywords() > apply_filters('the_content').*/
163
164
+ function apply_filters_if_white($tag, $value) {
165
+ global $wp_filter, $merged_filters, $wp_current_filter;
166
+
167
+ $args = array();
168
+ $wp_current_filter[] = $tag;
169
+
170
+ // Do 'all' actions first
171
+ if ( isset($wp_filter['all']) ) {
172
+ $args = func_get_args();
173
+ _wp_call_all_hook($args);
174
+ }
175
176
+ if ( !isset($wp_filter[$tag]) ) {
177
+ array_pop($wp_current_filter);
178
+ return $value;
179
+ }
180
181
+ // Sort
182
+ if ( !isset( $merged_filters[ $tag ] ) ) {
183
+ ksort($wp_filter[$tag]);
184
+ $merged_filters[ $tag ] = true;
185
+ }
186
187
reset( $wp_filter[ $tag ] );
188
189
+ if ( empty($args) )
190
+ $args = func_get_args();
191
+
192
193
do{
194
foreach( (array) current($wp_filter[$tag]) as $the_ ) {
195
if ( !is_null($the_['function'])
196
and yarpp_white($the_['function'])){ // HACK
197
+ $args[1] = $value;
198
+ $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
199
}
200
}
201
202
} while ( next($wp_filter[$tag]) !== false );
203
204
+ array_pop( $wp_current_filter );
205
+
206
+ return $value;
207
}
208
209
// upgrade to 1.5!
magic.php CHANGED
@@ -82,23 +82,22 @@ function yarpp_sql($options_array,$giveresults = true) {
82
83
$totalweight = $bodyweight + $titleweight + $tagweight + $catweight;
84
85
- $weightedthresh = $threshold/$totalweight;
86
87
// get disallowed categories and tags
88
89
$disterms = implode(',', array_filter(array_merge(explode(',',get_option('yarpp_discats')),explode(',',get_option('yarpp_distags'))),'is_numeric'));
90
91
-
92
$sql = "SELECT *, (bodyscore * $bodyweight + titlescore * $titleweight + tagscore * $tagweight + catscore * $catweight) AS score
93
from (
94
- select ID, post_title, post_date, post_content, (MATCH (post_content) AGAINST ('udon yilan great diner pizza steak soup taipei store aaron meal real american 0 night half market classic taiwanese recommended')) as bodyscore, (MATCH (post_title) AGAINST ('ate food')) as titlescore, ifnull(catscore,0) as catscore, ifnull(tagscore,0) as tagscore
95
- from $wpdb->posts
96
- left join (
97
select count(*) as block, object_id from $wpdb->term_relationships natural join $wpdb->term_taxonomy natural join $wpdb->terms
98
where $wpdb->terms.term_id in ($disterms)
99
group by object_id
100
- ) as poolblock on ($wpdb->posts.ID = poolblock.object_id)
101
- left join (
102
select count(*) as tagscore, object_id from $wpdb->term_relationships natural join $wpdb->term_taxonomy
103
where $wpdb->term_taxonomy.taxonomy = 'post_tag'
104
and $wpdb->term_taxonomy.term_taxonomy_id in (select term_taxonomy_id from $wpdb->term_relationships where object_id = '$post->ID')
@@ -113,17 +112,20 @@ function yarpp_sql($options_array,$giveresults = true) {
113
where ((post_status IN ( 'publish', 'static' ) && ID != '$post->ID')"
114
.($past_only ?" and post_date <= '$now' ":' ')
115
.((!$show_pass_post)?" and post_password ='' ":' ')
116
- ." and post_type IN ('".implode("', '",$type)."')
117
- and block IS NULL
118
- )
119
- ) as rawscores
120
- where (bodyscore * $bodyweight + titlescore * $titleweight + tagscore * $tagweight + catscore * $catweight) >= $threshold"
121
.((get_option('yarpp_categories') == 3)?' and catscore >= 1':'')
122
.((get_option('yarpp_categories') == 4)?' and catscore >= 2':'')
123
.((get_option('yarpp_tags') == 3)?' and tagscore >= 1':'')
124
.((get_option('yarpp_tags') == 4)?' and tagscore >= 2':'')
125
." order by ".((get_option('yarpp_order')?get_option('yarpp_order'):"score desc"))." limit $limit";
126
127
if (!$giveresults) {
128
$sql = 'select count(*) from ('.$sql.')';
129
}
82
83
$totalweight = $bodyweight + $titleweight + $tagweight + $catweight;
84
85
+ $weightedthresh = $threshold/($totalweight + 0.1);
86
87
// get disallowed categories and tags
88
89
$disterms = implode(',', array_filter(array_merge(explode(',',get_option('yarpp_discats')),explode(',',get_option('yarpp_distags'))),'is_numeric'));
90
91
$sql = "SELECT *, (bodyscore * $bodyweight + titlescore * $titleweight + tagscore * $tagweight + catscore * $catweight) AS score
92
from (
93
+ select ID, post_title, post_date, post_content, (MATCH (post_content) AGAINST ('".post_body_keywords()."')) as bodyscore, (MATCH (post_title) AGAINST ('".post_title_keywords()."')) as titlescore, ifnull(catscore,0) as catscore, ifnull(tagscore,0) as tagscore
94
+ from $wpdb->posts "
95
+ .(count(array_filter(array_merge(explode(',',get_option('yarpp_discats')),explode(',',get_option('yarpp_distags'))),'is_numeric'))?" left join (
96
select count(*) as block, object_id from $wpdb->term_relationships natural join $wpdb->term_taxonomy natural join $wpdb->terms
97
where $wpdb->terms.term_id in ($disterms)
98
group by object_id
99
+ ) as poolblock on ($wpdb->posts.ID = poolblock.object_id)":'')
100
+ ." left join (
101
select count(*) as tagscore, object_id from $wpdb->term_relationships natural join $wpdb->term_taxonomy
102
where $wpdb->term_taxonomy.taxonomy = 'post_tag'
103
and $wpdb->term_taxonomy.term_taxonomy_id in (select term_taxonomy_id from $wpdb->term_relationships where object_id = '$post->ID')
112
where ((post_status IN ( 'publish', 'static' ) && ID != '$post->ID')"
113
.($past_only ?" and post_date <= '$now' ":' ')
114
.((!$show_pass_post)?" and post_password ='' ":' ')
115
+ ." and post_type IN ('".implode("', '",$type)."')"
116
+ .(count(array_filter(array_merge(explode(',',get_option('yarpp_discats')),explode(',',get_option('yarpp_distags'))),'is_numeric'))?" and block IS NULL":'').
117
+ " )
118
+ ) as rawscores";
119
+
120
+ $sql .= " where (bodyscore * $bodyweight + titlescore * $titleweight + tagscore * $tagweight + catscore * $catweight) >= $threshold"
121
.((get_option('yarpp_categories') == 3)?' and catscore >= 1':'')
122
.((get_option('yarpp_categories') == 4)?' and catscore >= 2':'')
123
.((get_option('yarpp_tags') == 3)?' and tagscore >= 1':'')
124
.((get_option('yarpp_tags') == 4)?' and tagscore >= 2':'')
125
." order by ".((get_option('yarpp_order')?get_option('yarpp_order'):"score desc"))." limit $limit";
126
127
+ //echo $sql;
128
+
129
if (!$giveresults) {
130
$sql = 'select count(*) from ('.$sql.')';
131
}
options.php CHANGED
@@ -1,7 +1,7 @@
1
<?php
2
// Begin Related Posts Options
3
4
- global $yarpp_value_options, $yarpp_binary_options;
5
if (!yarpp_enabled()) {
6
echo '<div class="updated">';
7
if (yarpp_activate()) echo 'The YARPP database had an error but has been fixed.';
1
<?php
2
// Begin Related Posts Options
3
4
+ global $wpdb, $yarpp_value_options, $yarpp_binary_options;
5
if (!yarpp_enabled()) {
6
echo '<div class="updated">';
7
if (yarpp_activate()) echo 'The YARPP database had an error but has been fixed.';
readme.txt CHANGED
@@ -6,8 +6,8 @@ Plugin URI: http://mitcho.com/code/yarpp/
6
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=mitcho%40mitcho%2ecom&item_name=mitcho%2ecom%2fcode%3a%20donate%20to%20Michael%20Yoshitaka%20Erlewine&no_shipping=0&no_note=1&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8
7
Tags: related, posts, post, pages, page
8
Requires at least: 2.3
9
- Tested up to: 2.5.1
10
- Stable tag: 2.0.1
11
12
Returns a list of the related entries based on keyword matches, limited by a certain relatedness threshold. New and improved, version 2.0!
13
@@ -88,6 +88,13 @@ I highly recommend you disactivate YARPP, replace it with the new one, and then
88
* 2.0.1
89
* Bugfix: [`admin_menu` instead of `admin_head`](http://konstruktors.com/blog/wordpress/277-fixing-postpost-and-ozh-absolute-comments-plugins/)
90
* Bugfix: [a variable scope issue](http://wordpress.org/support/topic/188550) crucial for 2.0 upgrading
91
92
== Future versions ==
93
6
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=mitcho%40mitcho%2ecom&item_name=mitcho%2ecom%2fcode%3a%20donate%20to%20Michael%20Yoshitaka%20Erlewine&no_shipping=0&no_note=1&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8
7
Tags: related, posts, post, pages, page
8
Requires at least: 2.3
9
+ Tested up to: 2.6
10
+ Stable tag: 2.0.4
11
12
Returns a list of the related entries based on keyword matches, limited by a certain relatedness threshold. New and improved, version 2.0!
13
88
* 2.0.1
89
* Bugfix: [`admin_menu` instead of `admin_head`](http://konstruktors.com/blog/wordpress/277-fixing-postpost-and-ozh-absolute-comments-plugins/)
90
* Bugfix: [a variable scope issue](http://wordpress.org/support/topic/188550) crucial for 2.0 upgrading
91
+ * 2.0.2
92
+ * Versioning bugfix (rerelease of 2.0.1)
93
+ * 2.0.3
94
+ * Bugfix: [2.0.2 accidentally required some tags or categories to be disabled](http://wordpress.org/support/topic/188745)
95
+ * 2.0.4 - what 2.0 should have been
96
+ * Bugfix: new fulltext query for MySQL 5 compatibility
97
+ * Bugfix: updated apply_filters to work with WP 2.6
98
99
== Future versions ==
100
yarpp.php CHANGED
@@ -2,8 +2,8 @@
2
/*
3
Plugin Name: Yet Another Related Posts Plugin
4
Plugin URI: http://mitcho.com/code/yarpp/
5
- Description: Returns a list of the related entries based on keyword matches, limited by a certain relatedness threshold. Like the tried and true Related Posts plugins—just better!
6
- Version: 2.0
7
Author: mitcho (Michael Yoshitaka Erlewine)
8
*/
9
2
/*
3
Plugin Name: Yet Another Related Posts Plugin
4
Plugin URI: http://mitcho.com/code/yarpp/
5
+ Description: Returns a list of the related entries based on keyword matches, limited by a certain relatedness threshold. New and improved, version 2.0!
6
+ Version: 2.0.4
7
Author: mitcho (Michael Yoshitaka Erlewine)
8
*/
9