Yet Another Related Posts Plugin (YARPP) - Version 2.0.5

Version Description

Download this release

Release Info

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

Code changes from version 2.0.4 to 2.0.5

Files changed (5) hide show
  1. includes.php +62 -23
  2. magic.php +50 -53
  3. options.php +52 -45
  4. readme.txt +15 -4
  5. yarpp.php +1 -1
includes.php CHANGED
@@ -6,7 +6,7 @@ $yarpp_value_options = array('threshold' => 5,
6
'excerpt_length' => 10,
7
'before_title' => '<li>',
8
'after_title' => '</li>',
9
- 'before_post' => '<small>',
10
'after_post' => '</small>',
11
'before_related' => '<p>Related posts:<ol>',
12
'after_related' => '</ol></p>',
@@ -36,43 +36,62 @@ function yarpp_enabled() {
36
return 0;
37
}
38
39
function yarpp_activate() {
40
global $yarpp_version, $wpdb, $yarpp_binary_options, $yarpp_value_options;
41
- $yarpp_options = array_merge($yarpp_binary_options, $yarpp_value_options);
42
- foreach (array_keys($yarpp_options) as $option) {
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
60
- 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 1.5. YARPP 1.5 adds "simple installation" which automagically prints a simple related posts display at the end of each single entry (permalink) page without tinkering with any theme files. As a previous YARPP user, you probably have already edited your theme files to your liking, so this "automatic display" feature has been turned off.</p><p>If you would like to use "automatic display," remove <code>related_posts</code> from your <code>single.php</code> file and turn on automatic display in the YARPP options. Make sure to adjust the new prefix and suffix preferences to your liking as well.</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>';
61
yarpp_upgrade_one_five();
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]);
69
}
70
foreach (array_keys($yarpp_binary_options) as $option) {
71
- if (!get_option('yarpp_'.$option))
72
- add_option('yarpp_'.$option,$yarpp_binary_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
@@ -80,15 +99,16 @@ function yarpp_upgrade_check() {
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`)");
@@ -115,11 +135,11 @@ function widget_yarpp_init() {
115
function widget_yarpp($args) {
116
extract($args);
117
global $wpdb, $post, $user_level;
118
- if (get_option('yarpp_auto_display') and is_single()) {
119
- echo $before_widget;
120
- echo $before_title . 'Related Posts' . $after_title;
121
- echo yarpp_related(array('post'),array());
122
- echo $after_widget;
123
}
124
}
125
register_sidebar_widget(__('YARPP'), 'widget_yarpp');
@@ -212,7 +232,7 @@ function yarpp_upgrade_one_five() {
212
$migrate_options = array('past_only','show_score','show_excerpt','show_pass_post','cross_relate','limit','threshold','before_title','after_title','before_post','after_post');
213
foreach ($migrate_options as $option) {
214
if (get_option($option)) {
215
- update_option('yarpp_'.$option,get_option($option));
216
delete_option($option);
217
}
218
}
@@ -239,4 +259,23 @@ function yarpp_excerpt($content,$length) {
239
return implode(' ',array_slice(preg_split('/\s+/',$content),0,$length)).'...';
240
}
241
242
?>
6
'excerpt_length' => 10,
7
'before_title' => '<li>',
8
'after_title' => '</li>',
9
+ 'before_post' => ' <small>',
10
'after_post' => '</small>',
11
'before_related' => '<p>Related posts:<ol>',
12
'after_related' => '</ol></p>',
36
return 0;
37
}
38
39
+ function yarpp_reinforce() {
40
+ if (!get_option('yarpp_version'))
41
+ yarpp_activate();
42
+ yarpp_upgrade_check(true);
43
+ }
44
+
45
function yarpp_activate() {
46
global $yarpp_version, $wpdb, $yarpp_binary_options, $yarpp_value_options;
47
+ foreach (array_keys($yarpp_value_options) as $option) {
48
+ if (!get_option("yarpp_$option") or get_option("yarpp_$option") == '')
49
+ add_option("yarpp_$option",$yarpp_value_options[$option]);
50
+ }
51
+ foreach (array_keys($yarpp_binary_options) as $option) {
52
+ if (!get_option("yarpp_$option") or get_option("yarpp_$option") == '')
53
+ add_option("yarpp_$option",$yarpp_binary_options[$option]." ");
54
}
55
if (!yarpp_enabled()) {
56
// $wpdb->query("ALTER TABLE `wp_posts` DROP INDEX `yarpp_cache`");
57
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title`)");
58
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content`)");
59
}
60
+ add_option('yarpp_version','2.05');
61
+ update_option('yarpp_version','2.05');
62
return 1;
63
}
64
65
+ function yarpp_upgrade_check($inuse = false) {
66
global $wpdb, $yarpp_value_options, $yarpp_binary_options;
67
68
+ foreach (array_keys($yarpp_value_options) as $option) {
69
+ if (!get_option("yarpp_$option") or get_option("yarpp_$option") == '')
70
+ add_option("yarpp_$option",$yarpp_value_options[$option].' ');
71
+ }
72
+ foreach (array_keys($yarpp_binary_options) as $option) {
73
+ if (!get_option("yarpp_$option") or get_option("yarpp_$option") == '')
74
+ add_option("yarpp_$option",$yarpp_binary_options[$option]." ");
75
+ }
76
+
77
if (get_option('threshold') and get_option('limit') and get_option('len')) {
78
+ yarpp_activate();
79
yarpp_upgrade_one_five();
80
update_option('yarpp_version','1.5');
81
}
82
83
if (get_option('yarpp_version') < 2) {
84
foreach (array_keys($yarpp_value_options) as $option) {
85
+ if (!get_option("yarpp_$option"))
86
+ add_option("yarpp_$option",$yarpp_value_options[$option].' ');
87
}
88
foreach (array_keys($yarpp_binary_options) as $option) {
89
+ if (!get_option("yarpp_$option"))
90
+ add_option("yarpp_$option",$yarpp_binary_options[$option]);
91
}
92
93
+ if (!$inuse)
94
+ 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>';
95
update_option('yarpp_version','2.0');
96
}
97
99
update_option('yarpp_version','2.02');
100
}
101
102
+ if (get_option('yarpp_version') < 2.03) {
103
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title`)");
104
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content`)"); update_option('yarpp_version','2.03');
105
}
106
107
+ if (get_option('yarpp_version') < 2.05) {
108
+ update_option('yarpp_version','2.05');
109
}
110
111
+
112
// just in case, try to add the index one more time.
113
if (!yarpp_enabled()) {
114
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title`)");
135
function widget_yarpp($args) {
136
extract($args);
137
global $wpdb, $post, $user_level;
138
+ if (is_single()) {
139
+ echo $before_widget;
140
+ echo $before_title . 'Related Posts' . $after_title;
141
+ echo yarpp_related(array('post'),array());
142
+ echo $after_widget;
143
}
144
}
145
register_sidebar_widget(__('YARPP'), 'widget_yarpp');
232
$migrate_options = array('past_only','show_score','show_excerpt','show_pass_post','cross_relate','limit','threshold','before_title','after_title','before_post','after_post');
233
foreach ($migrate_options as $option) {
234
if (get_option($option)) {
235
+ update_option("yarpp_$option",get_option($option));
236
delete_option($option);
237
}
238
}
259
return implode(' ',array_slice(preg_split('/\s+/',$content),0,$length)).'...';
260
}
261
262
+ function yarpp_set_option($option,$value) {
263
+ global $yarpp_value_options;
264
+ if (array_search($option,array_keys($yarpp_value_options)) === true)
265
+ update_option("yarpp_$option",$value.' ');
266
+ else
267
+ update_option("yarpp_$option",$value);
268
+ }
269
+
270
+ function yarpp_get_option($option,$escapehtml = false) {
271
+ global $yarpp_value_options;
272
+ if (!(array_search($option,array_keys($yarpp_value_options)) === false))
273
+ $return = chop(get_option("yarpp_$option"));
274
+ else
275
+ $return = get_option("yarpp_$option");
276
+ if ($escapehtml)
277
+ $return = htmlspecialchars(stripslashes($return));
278
+ return $return;
279
+ }
280
+
281
?>
magic.php CHANGED
@@ -63,7 +63,7 @@ function yarpp_sql($options_array,$giveresults = true) {
63
extract($options_array);
64
65
// if cross_relate is set, override the type argument and make sure both matches are accepted in the sql query
66
- if (get_option('yarpp_cross_relate')) $type = array('post','page');
67
68
// Fetch keywords
69
$body_terms = post_body_keywords();
@@ -75,10 +75,10 @@ function yarpp_sql($options_array,$giveresults = true) {
75
76
// get weights
77
78
- $bodyweight = ((get_option('yarpp_body') == 3)?3:((get_option('yarpp_body') == 2)?1:0));
79
- $titleweight = ((get_option('yarpp_title') == 3)?3:((get_option('yarpp_title') == 2)?1:0));
80
- $tagweight = ((get_option('yarpp_tags') != 1)?1:0);
81
- $catweight = ((get_option('yarpp_categories') != 1)?1:0);
82
83
$totalweight = $bodyweight + $titleweight + $tagweight + $catweight;
84
@@ -86,55 +86,52 @@ function yarpp_sql($options_array,$giveresults = true) {
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')
104
- group by object_id
105
- ) as matchtags on ($wpdb->posts.ID = matchtags.object_id)
106
- left join (
107
- select count(*) as catscore, object_id from $wpdb->term_relationships natural join $wpdb->term_taxonomy
108
- where $wpdb->term_taxonomy.taxonomy = 'category'
109
- and $wpdb->term_taxonomy.term_taxonomy_id in (select term_taxonomy_id from $wpdb->term_relationships where object_id = '$post->ID')
110
- group by object_id
111
- ) as matchcats on ($wpdb->posts.ID = matchcats.object_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
}
132
133
- return $sql;
134
}
135
136
function yarpp_related($type,$args,$echo = true) {
137
- global $wpdb, $post, $user_level;
138
get_currentuserinfo();
139
140
// get options
@@ -144,7 +141,7 @@ function yarpp_related($type,$args,$echo = true) {
144
if (isset($args[$index+1])) {
145
$optvals[$options[$index]] = stripslashes($args[$index+1]);
146
} else {
147
- $optvals[$options[$index]] = stripslashes(stripslashes(get_option('yarpp_'.$options[$index])));
148
}
149
}
150
extract($optvals);
@@ -160,18 +157,18 @@ function yarpp_related($type,$args,$echo = true) {
160
$permalink = get_permalink($result->ID);
161
$post_content = strip_tags($result->post_content);
162
$post_content = stripslashes($post_content);
163
- $output .= $before_title .'<a href="'. $permalink .'" rel="bookmark" title="Permanent Link: ' . $title . '">' . $title . (($show_score and $user_level >= 8)? ' ('.round($result->score,3).')':'') . '</a>';
164
if ($show_excerpt) {
165
$output .= $before_post . yarpp_excerpt($post_content,$excerpt_length) . $after_post;
166
}
167
$output .= $after_title;
168
}
169
- $output = stripslashes(stripslashes(get_option('yarpp_before_related'))).$output.stripslashes(stripslashes(get_option('yarpp_after_related')));
170
- if (get_option('yarpp_promote_yarpp'))
171
$output .= "\n<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>";
172
173
} else {
174
- $output = get_option('yarpp_no_results');
175
}
176
if ($echo) echo $output; else return $output;
177
}
@@ -185,7 +182,7 @@ function yarpp_related_exist($type,$args) {
185
if (isset($args[$index+1])) {
186
$optvals[$options[$index]] = stripslashes($args[$index+1]);
187
} else {
188
- $optvals[$options[$index]] = stripslashes(stripslashes(get_option('yarpp_'.$options[$index])));
189
}
190
}
191
extract($optvals);
63
extract($options_array);
64
65
// if cross_relate is set, override the type argument and make sure both matches are accepted in the sql query
66
+ if (yarpp_get_option('cross_relate')) $type = array('post','page');
67
68
// Fetch keywords
69
$body_terms = post_body_keywords();
75
76
// get weights
77
78
+ $bodyweight = ((yarpp_get_option('body') == 3)?3:((yarpp_get_option('body') == 2)?1:0));
79
+ $titleweight = ((yarpp_get_option('title') == 3)?3:((yarpp_get_option('title') == 2)?1:0));
80
+ $tagweight = ((yarpp_get_option('tags') != 1)?1:0);
81
+ $catweight = ((yarpp_get_option('categories') != 1)?1:0);
82
83
$totalweight = $bodyweight + $titleweight + $tagweight + $catweight;
84
86
87
// get disallowed categories and tags
88
89
+ $disterms = implode(',', array_filter(array_merge(explode(',',yarpp_get_option('discats')),explode(',',yarpp_get_option('distags'))),'is_numeric'));
90
+
91
+ $newsql = "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, COUNT( DISTINCT tagtax.term_taxonomy_id ) AS tagscore, COUNT( DISTINCT cattax.term_taxonomy_id ) AS catscore, ((MATCH (post_content) AGAINST ('".post_body_keywords()."')) * $bodyweight + (MATCH (post_title) AGAINST ('".post_title_keywords()."')) * $titleweight + COUNT( DISTINCT tagtax.term_taxonomy_id ) * $tagweight + COUNT( DISTINCT cattax.term_taxonomy_id ) * $catweight) AS score".(count(array_filter(array_merge(explode(',',yarpp_get_option('discats')),explode(',',yarpp_get_option('distags'))),'is_numeric'))?", count(blockterm.term_id) as block":"")."
92
+ FROM $wpdb->posts ";
93
+
94
+ $newsql .= (count(array_filter(array_merge(explode(',',yarpp_get_option('discats')),explode(',',yarpp_get_option('distags'))),'is_numeric'))?"left join $wpdb->term_relationships as blockrel on (wp_posts.ID = blockrel.object_id)
95
+ left join $wpdb->term_taxonomy as blocktax using (`term_taxonomy_id`)
96
+ left join $wpdb->terms as blockterm on (blocktax.term_id = blockterm.term_id and blockterm.term_id in ($disterms))":"");
97
+
98
+ $newsql .= "left JOIN $wpdb->term_relationships AS thistag ON (thistag.object_id = $post->ID )
99
+ left JOIN $wpdb->term_relationships AS tagrel on (tagrel.term_taxonomy_id = thistag.term_taxonomy_id
100
+ AND tagrel.object_id = $wpdb->posts.ID)
101
+ left JOIN $wpdb->term_taxonomy AS tagtax ON ( tagrel.term_taxonomy_id = tagtax.term_taxonomy_id
102
+ AND tagtax.taxonomy = 'post_tag')
103
+
104
+ left JOIN $wpdb->term_relationships AS thiscat ON (thiscat.object_id = $post->ID )
105
+ left JOIN $wpdb->term_relationships AS catrel on (catrel.term_taxonomy_id = thiscat.term_taxonomy_id
106
+ AND catrel.object_id = $wpdb->posts.ID)
107
+ left JOIN $wpdb->term_taxonomy AS cattax ON ( catrel.term_taxonomy_id = cattax.term_taxonomy_id
108
+ AND cattax.taxonomy = 'category')
109
+
110
+ where (post_status IN ( 'publish', 'static' ) && ID != '$post->ID')";
111
+
112
+ $newsql .= ($past_only ?" and post_date <= '$now' ":' ');
113
+ $newsql .= ((!$show_pass_post)?" and post_password ='' ":' ');
114
+ $newsql .= " and post_type IN ('".implode("', '",$type)."')";
115
+
116
+ $newsql .= " GROUP BY id ";
117
+ $newsql .= " having "; $newsql .= (count(array_filter(array_merge(explode(',',yarpp_get_option('discats')),explode(',',yarpp_get_option('distags'))),'is_numeric'))?" block = 0 and ":'');
118
+ $newsql .= " score >= $threshold";
119
+
120
+ $newsql .= ((yarpp_get_option('categories') == 3)?' and catscore >= 1':'');
121
+ $newsql .= ((yarpp_get_option('categories') == 4)?' and catscore >= 2':'');
122
+ $newsql .= ((yarpp_get_option('tags') == 3)?' and tagscore >= 1':'');
123
+ $newsql .= ((yarpp_get_option('tags') == 4)?' and tagscore >= 2':'');
124
+ $newsql .= " order by ".((yarpp_get_option('order')?yarpp_get_option('order'):"score desc"))." limit ".yarpp_get_option('limit');
125
126
if (!$giveresults) {
127
+ $sql = "select count(*) from ($sql)";
128
}
129
130
+ return $newsql;
131
}
132
133
function yarpp_related($type,$args,$echo = true) {
134
+ global $wpdb, $post, $userdata;
135
get_currentuserinfo();
136
137
// get options
141
if (isset($args[$index+1])) {
142
$optvals[$options[$index]] = stripslashes($args[$index+1]);
143
} else {
144
+ $optvals[$options[$index]] = stripslashes(stripslashes(yarpp_get_option($options[$index])));
145
}
146
}
147
extract($optvals);
157
$permalink = get_permalink($result->ID);
158
$post_content = strip_tags($result->post_content);
159
$post_content = stripslashes($post_content);
160
+ $output .= "$before_title<a href='$permalink' rel='bookmark' title='Permanent Link: $title'>$title" . (($show_score and $userdata->user_level >= 8)? ' <abbr title="'.round($result->score,3).' is the YARPP match score between the current entry and this related entry. You are seeing this value because you are logged in to WordPress as an administrator. It is not shown to regular visitors.">('.round($result->score,3).')</abbr>':'') . '</a>';
161
if ($show_excerpt) {
162
$output .= $before_post . yarpp_excerpt($post_content,$excerpt_length) . $after_post;
163
}
164
$output .= $after_title;
165
}
166
+ $output = stripslashes(stripslashes(yarpp_get_option('before_related'))).$output.stripslashes(stripslashes(yarpp_get_option('after_related')));
167
+ if (yarpp_get_option('promote_yarpp'))
168
$output .= "\n<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>";
169
170
} else {
171
+ $output = yarpp_get_option('no_results');
172
}
173
if ($echo) echo $output; else return $output;
174
}
182
if (isset($args[$index+1])) {
183
$optvals[$options[$index]] = stripslashes($args[$index+1]);
184
} else {
185
+ $optvals[$options[$index]] = stripslashes(stripslashes(yarpp_get_option($options[$index])));
186
}
187
}
188
extract($optvals);
options.php CHANGED
@@ -8,6 +8,8 @@ if (!yarpp_enabled()) {
8
echo '</div>';
9
}
10
11
//compute $tagmap
12
$tagmap = array();
13
foreach ($wpdb->get_results("select $wpdb->terms.term_id, name from $wpdb->terms natural join $wpdb->term_taxonomy where $wpdb->term_taxonomy.taxonomy = 'category'") as $tag) {
@@ -26,57 +28,62 @@ function yarpp_unmapthetag($name) {
26
27
if (isset($_POST['update_yarpp'])) {
28
foreach (array_keys($yarpp_value_options) as $option) {
29
- update_option('yarpp_'.$option,addslashes($_POST[$option]));
30
}
31
if (isset($_POST['discats'])) {
32
- update_option('yarpp_discats',implode(',',array_keys($_POST['discats']))); // discats is different
33
} else {
34
- update_option('yarpp_discats','');
35
}
36
37
if (isset($_POST['distags'])) {
38
- update_option('yarpp_distags',implode(',',array_keys($_POST['distags']))); // distags is also different
39
} else {
40
- update_option('yarpp_distags','');
41
}
42
//update_option('yarpp_distags',implode(',',array_map('yarpp_unmapthetag',preg_split('!\s*[;,]\s*!',strtolower($_POST['distags']))))); // distags is even more different
43
44
foreach (array_keys($yarpp_binary_options) as $option) {
45
- (isset($_POST[$option])) ? update_option('yarpp_'.$option,true) : update_option('yarpp_'.$option,false);
46
}
47
echo '<div id="message" class="updated fade" style="background-color: rgb(207, 235, 247);"><p>Options saved!</p></div>';
48
}
49
50
function checkbox($option,$desc,$tr="<tr valign='top'>
51
<th class='th-full' colspan='2' scope='row'>",$inputplus = '',$thplus='') {
52
- echo " $tr<input $inputplus type='checkbox' name='$option' value='true'". ((get_option('yarpp_'.$option)) ? ' checked="checked"': '' )." /> $desc</th>$thplus
53
</tr>";
54
}
55
function textbox($option,$desc,$size=2,$tr="<tr valign='top'>
56
<th scope='row'>") {
57
echo " $tr$desc</th>
58
- <td><input name='$option' type='text' id='$option' value='".htmlspecialchars(stripslashes(get_option('yarpp_'.$option)))."' size='$size' /></td>
59
</tr>";
60
}
61
function importance($option,$desc,$type='word',$tr="<tr valign='top'>
62
<th scope='row'>",$inputplus = '') {
63
echo " $tr$desc</th>
64
<td>
65
- <input $inputplus type='radio' name='$option' value='1'". ((get_option('yarpp_'.$option) == 1) ? ' checked="checked"': '' )." /> do not consider
66
- <input $inputplus type='radio' name='$option' value='2'". ((get_option('yarpp_'.$option) == 2) ? ' checked="checked"': '' )." /> consider
67
- <input $inputplus type='radio' name='$option' value='3'". ((get_option('yarpp_'.$option) == 3) ? ' checked="checked"': '' )." /> require at least one $type in common
68
- <input $inputplus type='radio' name='$option' value='4'". ((get_option('yarpp_'.$option) == 4) ? ' checked="checked"': '' )." /> require more than one $type in common
69
</td>
70
</tr>";
71
}
72
73
function importance2($option,$desc,$type='word',$tr="<tr valign='top'>
74
<th scope='row'>",$inputplus = '') {
75
echo " $tr$desc</th>
76
<td>
77
- <input $inputplus type='radio' name='$option' value='1'". ((get_option('yarpp_'.$option) == 1) ? ' checked="checked"': '' )." /> do not consider
78
- <input $inputplus type='radio' name='$option' value='2'". ((get_option('yarpp_'.$option) == 2) ? ' checked="checked"': '' )." /> consider
79
- <input $inputplus type='radio' name='$option' value='3'". ((get_option('yarpp_'.$option) == 3) ? ' checked="checked"': '' )." /> consider with extra weight
80
</td>
81
</tr>";
82
}
@@ -85,10 +92,10 @@ function select($option,$desc,$type='word',$tr="<tr valign='top'>
85
<th scope='row'>",$inputplus = '') {
86
echo " $tr$desc</th>
87
<td>
88
- <input $inputplus type='radio' name='$option' value='1'". ((get_option('yarpp_'.$option) == 1) ? ' checked="checked"': '' )." /> do not consider
89
- <input $inputplus type='radio' name='$option' value='2'". ((get_option('yarpp_'.$option) == 2) ? ' checked="checked"': '' )." /> consider
90
- <input $inputplus type='radio' name='$option' value='3'". ((get_option('yarpp_'.$option) == 3) ? ' checked="checked"': '' )." /> require at least one $type in common
91
- <input $inputplus type='radio' name='$option' value='4'". ((get_option('yarpp_'.$option) == 4) ? ' checked="checked"': '' )." /> require more than one $type in common
92
</td>
93
</tr>";
94
}
@@ -121,7 +128,7 @@ document.getElementsByTagName("head")[0].appendChild(css);
121
122
<h2>
123
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!" title="Donate to mitcho (Michael Yoshitaka Erlewine) for this plugin via PayPal" style="float:right" />
124
- Yet Another Related Posts Plugin Options <small><?php echo get_option('yarpp_version'); ?></small>
125
</h2>
126
</form>
127
@@ -138,9 +145,9 @@ document.getElementsByTagName("head")[0].appendChild(css);
138
<table class="form-table">
139
<tbody>
140
<tr valign='top'>
141
- <th scope='row'>Disallow by category: <span style='color:red;'>NEW!</span></th><td><div style="overflow:auto;max-height:100px;">
142
<?php
143
- $discats = explode(',',get_option('yarpp_discats'));
144
array_unshift($discats,' ');
145
foreach ($wpdb->get_results("select $wpdb->terms.term_id, name from $wpdb->terms natural join $wpdb->term_taxonomy where $wpdb->term_taxonomy.taxonomy = 'category' order by name") as $cat) {
146
echo "<input type='checkbox' name='discats[$cat->term_id]' value='true'". (array_search($cat->term_id,$discats) ? ' checked="checked"': '' )." /> <label for='discats[$cat->term_id]'>$cat->name</label> ";
@@ -148,10 +155,10 @@ document.getElementsByTagName("head")[0].appendChild(css);
148
</div></td>
149
</tr>
150
<tr valign='top'>
151
- <th scope='row'>Disallow by tag: <span style='color:red;'>NEW!</span></th>
152
- <td><div style="overflow:auto;max-height:100px;"><!--Enter tags to use to block entries. Delimit with commas. Tags that do not currently exist will be ignored.<br /><input name='distags' type='text' id='$option' value='<?php implode(",",array_map("yarpp_mapthetag",explode(",",htmlspecialchars(stripslashes(get_option('yarpp_'.$option))))));?>' size='40' />-->
153
<?php
154
- $distags = explode(',',get_option('yarpp_distags'));
155
array_unshift($distags,' ');
156
foreach ($wpdb->get_results("select $wpdb->terms.term_id, name from $wpdb->terms natural join $wpdb->term_taxonomy where $wpdb->term_taxonomy.taxonomy = 'post_tag' order by name") as $tag) {
157
echo "<input type='checkbox' name='distags[$tag->term_id]' value='true'". (array_search($tag->term_id,$distags) ? ' checked="checked"': '' )." /> <label for='distags[$tag->term_id]'>$tag->name</label> ";
@@ -176,10 +183,10 @@ document.getElementsByTagName("head")[0].appendChild(css);
176
</div>-->
177
178
<?php textbox('threshold','Match threshold:')?>
179
- <?php importance2('title',"Titles: <span style='color:red;'>NEW!</span>")?>
180
- <?php importance2('body',"Bodies: <span style='color:red;'>NEW!</span>")?>
181
- <?php importance('tags',"Tags: <span style='color:red;'>NEW!</span>",'tag')?>
182
- <?php importance('categories',"Categories: <span style='color:red;'>NEW!</span>",'category')?>
183
<?php checkbox('cross_relate',"Cross-relate posts and pages? <a href='#' class='info'>more&gt;<span>When the \"Cross-relate posts and pages\" option is selected, the <code>related_posts()</code>, <code>related_pagaes()</code>, and <code>related_entries()</code> all will give the same output, returning both related pages and posts.</span></a>"); ?>
184
</tbody>
185
</table>
@@ -207,14 +214,14 @@ document.getElementsByTagName("head")[0].appendChild(css);
207
<?php
208
// construct the demo code based on current preferences
209
210
- $democode = stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_related'))))."
211
";
212
- for ($i=1;$i<=get_option('yarpp_limit');$i++) {
213
- $democode .= stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_title')))).stripslashes(htmlspecialchars(stripslashes("<a href='PERMALINK$i'>RELATED TITLE $i</a>"))).(get_option('yarpp_show_excerpt')?"\r\t".stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_post')))).yarpp_excerpt(LOREMIPSUM,get_option('yarpp_excerpt_length')).stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_post')))):'').stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_after_title'))))."
214
";
215
}
216
- $democode .= stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_after_related'))));
217
- if (get_option('yarpp_promote_yarpp'))
218
$democode .= htmlspecialchars("\n<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>");
219
220
checkbox('auto_display',"Automatically display related posts? <a href='#' class='info'>more&gt;<span>This option automatically displays related posts right after the content on single entry pages. If this option is off, you will need to manually insert <code>related_posts()</code> or variants (<code>related_pagaes()</code> and <code>related_entries()</code>) into your theme files.","<tr valign='top'>
@@ -222,33 +229,33 @@ checkbox('auto_display',"Automatically display related posts? <a href='#' class=
222
."<code><pre style='overflow:auto;width:350px;'>".($democode)."</pre></code></td>"); ?>
223
<tr valign='top'>
224
<th>Before / after related entries:</th>
225
- <td><input name="before_related" type="text" id="before_related" value="<?php echo stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_related')))); ?>" size="10" /> / <input name="after_related" type="text" id="after_related" value="<?php echo stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_after_related')))); ?>" size="10" /><em><small> For example: &lt;ol&gt;&lt;/ol&gt; or &lt;div&gt;&lt;/div&gt;</small></em>
226
</td>
227
</tr>
228
<tr valign='top'>
229
<th>Before / after each post:</th>
230
- <td><input name="before_title" type="text" id="before_title" value="<?php echo stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_title')))); ?>" size="10" /> / <input name="after_title" type="text" id="after_title" value="<?php echo stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_after_title')))); ?>" size="10" /><em><small> For example: &lt;li&gt;&lt;/li&gt; or &lt;dl&gt;&lt;/dl&gt;</small></em>
231
</td>
232
</tr>
233
<?php checkbox('show_excerpt',"Show excerpt?","<tr valign='top'><th colspan='2'>",' name="show_excerpt" onclick="javascript:excerpt()"'); ?>
234
- <?php textbox('excerpt_length','Excerpt length (No. of words):',null,"<tr name='excerpted' valign='top' ".(get_option('yarpp_show_excerpt')?'':"style='display:none'").">
235
<th>")?>
236
237
- <tr name="excerpted" valign='top' <?php echo (get_option('yarpp_show_excerpt')?'':"style='display:none'")?>>
238
<th>Before / after (Excerpt):</th>
239
- <td><input name="before_post" type="text" id="before_post" value="<?php echo stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_before_post')))); ?>" size="10" /> / <input name="after_post" type="text" id="after_post" value="<?php echo stripslashes(htmlspecialchars(stripslashes(get_option('yarpp_after_post')))); ?>" size="10" /><em><small> For example: &lt;li&gt;&lt;/li&gt; or &lt;dl&gt;&lt;/dl&gt;</small></em>
240
</td>
241
</tr>
242
243
<tr name="excerpted" valign='top'>
244
<th>Order results:</th>
245
<td><select name="order" id="name">
246
- <option value="score DESC" <?php echo (get_option('yarpp_order')=='score DESC'?' selected="selected"':'')?>>score (high relevance to low)</option>
247
- <option value="score ASC" <?php echo (get_option('yarpp_order')=='score ASC'?' selected="selected"':'')?>>score (low relevance to high)</option>
248
- <option value="post_date DESC" <?php echo (get_option('yarpp_order')=='post_date DESC'?' selected="selected"':'')?>>date (new to old)</option>
249
- <option value="post_date ASC" <?php echo (get_option('yarpp_order')=='post_date ASC'?' selected="selected"':'')?>>date (old to new)</option>
250
- <option value="post_title ASC" <?php echo (get_option('yarpp_order')=='post_title ASC'?' selected="selected"':'')?>>title (alphabetical)</option>
251
- <option value="post_title DESC" <?php echo (get_option('yarpp_order')=='post_title DESC'?' selected="selected"':'')?>>title (reverse alphabetical)</option>
252
</select>
253
</td>
254
</tr>
8
echo '</div>';
9
}
10
11
+ yarpp_reinforce(); // just in case, set default options, etc.
12
+
13
//compute $tagmap
14
$tagmap = array();
15
foreach ($wpdb->get_results("select $wpdb->terms.term_id, name from $wpdb->terms natural join $wpdb->term_taxonomy where $wpdb->term_taxonomy.taxonomy = 'category'") as $tag) {
28
29
if (isset($_POST['update_yarpp'])) {
30
foreach (array_keys($yarpp_value_options) as $option) {
31
+ yarpp_set_option($option,addslashes($_POST[$option]));
32
}
33
if (isset($_POST['discats'])) {
34
+ yarpp_set_option('discats',implode(',',array_keys($_POST['discats']))); // discats is different
35
} else {
36
+ yarpp_set_option('discats','');
37
}
38
39
if (isset($_POST['distags'])) {
40
+ yarpp_set_option('distags',implode(',',array_keys($_POST['distags']))); // distags is also different
41
} else {
42
+ yarpp_set_option('distags','');
43
}
44
//update_option('yarpp_distags',implode(',',array_map('yarpp_unmapthetag',preg_split('!\s*[;,]\s*!',strtolower($_POST['distags']))))); // distags is even more different
45
46
foreach (array_keys($yarpp_binary_options) as $option) {
47
+ (isset($_POST[$option])) ? yarpp_set_option($option,true) : yarpp_set_option($option,false);
48
}
49
echo '<div id="message" class="updated fade" style="background-color: rgb(207, 235, 247);"><p>Options saved!</p></div>';
50
}
51
52
function checkbox($option,$desc,$tr="<tr valign='top'>
53
<th class='th-full' colspan='2' scope='row'>",$inputplus = '',$thplus='') {
54
+ echo " $tr<input $inputplus type='checkbox' name='$option' value='true'". ((yarpp_get_option($option)) ? ' checked="checked"': '' )." /> $desc</th>$thplus
55
</tr>";
56
}
57
function textbox($option,$desc,$size=2,$tr="<tr valign='top'>
58
<th scope='row'>") {
59
+ $value = yarpp_get_option($option,true);
60
echo " $tr$desc</th>
61
+ <td><input name='$option' type='text' id='$option' value='$value' size='$size' /></td>
62
</tr>";
63
}
64
function importance($option,$desc,$type='word',$tr="<tr valign='top'>
65
<th scope='row'>",$inputplus = '') {
66
+ $value = yarpp_get_option($option);
67
+
68
echo " $tr$desc</th>
69
<td>
70
+ <input $inputplus type='radio' name='$option' value='1'". (($value == 1) ? ' checked="checked"': '' )." /> do not consider
71
+ <input $inputplus type='radio' name='$option' value='2'". (($value == 2) ? ' checked="checked"': '' )." /> consider
72
+ <input $inputplus type='radio' name='$option' value='3'". (($value == 3) ? ' checked="checked"': '' )." /> require at least one $type in common
73
+ <input $inputplus type='radio' name='$option' value='4'". (($value == 4) ? ' checked="checked"': '' )." /> require more than one $type in common
74
</td>
75
</tr>";
76
}
77
78
function importance2($option,$desc,$type='word',$tr="<tr valign='top'>
79
<th scope='row'>",$inputplus = '') {
80
+ $value = yarpp_get_option($option);
81
+
82
echo " $tr$desc</th>
83
<td>
84
+ <input $inputplus type='radio' name='$option' value='1'". (($value == 1) ? ' checked="checked"': '' )." /> do not consider
85
+ <input $inputplus type='radio' name='$option' value='2'". (($value == 2) ? ' checked="checked"': '' )." /> consider
86
+ <input $inputplus type='radio' name='$option' value='3'". (($value == 3) ? ' checked="checked"': '' )." /> consider with extra weight
87
</td>
88
</tr>";
89
}
92
<th scope='row'>",$inputplus = '') {
93
echo " $tr$desc</th>
94
<td>
95
+ <input $inputplus type='radio' name='$option' value='1'". ((yarpp_get_option($option) == 1) ? ' checked="checked"': '' )." /> do not consider
96
+ <input $inputplus type='radio' name='$option' value='2'". ((yarpp_get_option($option) == 2) ? ' checked="checked"': '' )." /> consider
97
+ <input $inputplus type='radio' name='$option' value='3'". ((yarpp_get_option($option) == 3) ? ' checked="checked"': '' )." /> require at least one $type in common
98
+ <input $inputplus type='radio' name='$option' value='4'". ((yarpp_get_option($option) == 4) ? ' checked="checked"': '' )." /> require more than one $type in common
99
</td>
100
</tr>";
101
}
128
129
<h2>
130
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!" title="Donate to mitcho (Michael Yoshitaka Erlewine) for this plugin via PayPal" style="float:right" />
131
+ Yet Another Related Posts Plugin Options <small><?php echo yarpp_get_option('version'); ?></small>
132
</h2>
133
</form>
134
145
<table class="form-table">
146
<tbody>
147
<tr valign='top'>
148
+ <th scope='row'>Disallow by category:</th><td><div style="overflow:auto;max-height:100px;">
149
<?php
150
+ $discats = explode(',',yarpp_get_option('discats'));
151
array_unshift($discats,' ');
152
foreach ($wpdb->get_results("select $wpdb->terms.term_id, name from $wpdb->terms natural join $wpdb->term_taxonomy where $wpdb->term_taxonomy.taxonomy = 'category' order by name") as $cat) {
153
echo "<input type='checkbox' name='discats[$cat->term_id]' value='true'". (array_search($cat->term_id,$discats) ? ' checked="checked"': '' )." /> <label for='discats[$cat->term_id]'>$cat->name</label> ";
155
</div></td>
156
</tr>
157
<tr valign='top'>
158
+ <th scope='row'>Disallow by tag: </th>
159
+ <td><div style="overflow:auto;max-height:100px;"><!--Enter tags to use to block entries. Delimit with commas. Tags that do not currently exist will be ignored.<br /><input name='distags' type='text' id='$option' value='<?php implode(",",array_map("yarpp_mapthetag",explode(",",htmlspecialchars(stripslashes(yarpp_get_option($option))))));?>' size='40' />-->
160
<?php
161
+ $distags = explode(',',yarpp_get_option('distags'));
162
array_unshift($distags,' ');
163
foreach ($wpdb->get_results("select $wpdb->terms.term_id, name from $wpdb->terms natural join $wpdb->term_taxonomy where $wpdb->term_taxonomy.taxonomy = 'post_tag' order by name") as $tag) {
164
echo "<input type='checkbox' name='distags[$tag->term_id]' value='true'". (array_search($tag->term_id,$distags) ? ' checked="checked"': '' )." /> <label for='distags[$tag->term_id]'>$tag->name</label> ";
183
</div>-->
184
185
<?php textbox('threshold','Match threshold:')?>
186
+ <?php importance2('title',"Titles: ")?>
187
+ <?php importance2('body',"Bodies: ")?>
188
+ <?php importance('tags',"Tags: ",'tag')?>
189
+ <?php importance('categories',"Categories: ",'category')?>
190
<?php checkbox('cross_relate',"Cross-relate posts and pages? <a href='#' class='info'>more&gt;<span>When the \"Cross-relate posts and pages\" option is selected, the <code>related_posts()</code>, <code>related_pagaes()</code>, and <code>related_entries()</code> all will give the same output, returning both related pages and posts.</span></a>"); ?>
191
</tbody>
192
</table>
214
<?php
215
// construct the demo code based on current preferences
216
217
+ $democode = stripslashes(yarpp_get_option('before_related',true))."
218
";
219
+ for ($i=1;$i<=yarpp_get_option('limit');$i++) {
220
+ $democode .= stripslashes(yarpp_get_option('before_title',true)).stripslashes(htmlspecialchars("<a href='PERMALINK$i'>RELATED TITLE $i</a>")).(yarpp_get_option('show_excerpt')?"\r\t".stripslashes(yarpp_get_option('before_post',true)).yarpp_excerpt(LOREMIPSUM,yarpp_get_option('excerpt_length')).stripslashes(yarpp_get_option('before_post',true)):'').stripslashes(yarpp_get_option('after_title',true))."
221
";
222
}
223
+ $democode .= stripslashes(yarpp_get_option('after_related',true));
224
+ if (yarpp_get_option('promote_yarpp'))
225
$democode .= htmlspecialchars("\n<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>");
226
227
checkbox('auto_display',"Automatically display related posts? <a href='#' class='info'>more&gt;<span>This option automatically displays related posts right after the content on single entry pages. If this option is off, you will need to manually insert <code>related_posts()</code> or variants (<code>related_pagaes()</code> and <code>related_entries()</code>) into your theme files.","<tr valign='top'>
229
."<code><pre style='overflow:auto;width:350px;'>".($democode)."</pre></code></td>"); ?>
230
<tr valign='top'>
231
<th>Before / after related entries:</th>
232
+ <td><input name="before_related" type="text" id="before_related" value="<?php echo stripslashes(yarpp_get_option('before_related',true)); ?>" size="10" /> / <input name="after_related" type="text" id="after_related" value="<?php echo stripslashes(yarpp_get_option('after_related',true)); ?>" size="10" /><em><small> For example: &lt;ol&gt;&lt;/ol&gt; or &lt;div&gt;&lt;/div&gt;</small></em>
233
</td>
234
</tr>
235
<tr valign='top'>
236
<th>Before / after each post:</th>
237
+ <td><input name="before_title" type="text" id="before_title" value="<?php echo stripslashes(yarpp_get_option('before_title',true)); ?>" size="10" /> / <input name="after_title" type="text" id="after_title" value="<?php echo stripslashes(yarpp_get_option('after_title',true)); ?>" size="10" /><em><small> For example: &lt;li&gt;&lt;/li&gt; or &lt;dl&gt;&lt;/dl&gt;</small></em>
238
</td>
239
</tr>
240
<?php checkbox('show_excerpt',"Show excerpt?","<tr valign='top'><th colspan='2'>",' name="show_excerpt" onclick="javascript:excerpt()"'); ?>
241
+ <?php textbox('excerpt_length','Excerpt length (No. of words):',null,"<tr name='excerpted' valign='top' ".(yarpp_get_option('show_excerpt')?'':"style='display:none'").">
242
<th>")?>
243
244
+ <tr name="excerpted" valign='top' <?php echo (yarpp_get_option('show_excerpt')?'':"style='display:none'")?>>
245
<th>Before / after (Excerpt):</th>
246
+ <td><input name="before_post" type="text" id="before_post" value="<?php echo stripslashes(yarpp_get_option('before_post',true)); ?>" size="10" /> / <input name="after_post" type="text" id="after_post" value="<?php echo stripslashes(yarpp_get_option('after_post')); ?>" size="10" /><em><small> For example: &lt;li&gt;&lt;/li&gt; or &lt;dl&gt;&lt;/dl&gt;</small></em>
247
</td>
248
</tr>
249
250
<tr name="excerpted" valign='top'>
251
<th>Order results:</th>
252
<td><select name="order" id="name">
253
+ <option value="score DESC" <?php echo (yarpp_get_option('order')=='score DESC'?' selected="selected"':'')?>>score (high relevance to low)</option>
254
+ <option value="score ASC" <?php echo (yarpp_get_option('order')=='score ASC'?' selected="selected"':'')?>>score (low relevance to high)</option>
255
+ <option value="post_date DESC" <?php echo (yarpp_get_option('order')=='post_date DESC'?' selected="selected"':'')?>>date (new to old)</option>
256
+ <option value="post_date ASC" <?php echo (yarpp_get_option('order')=='post_date ASC'?' selected="selected"':'')?>>date (old to new)</option>
257
+ <option value="post_title ASC" <?php echo (yarpp_get_option('order')=='post_title ASC'?' selected="selected"':'')?>>title (alphabetical)</option>
258
+ <option value="post_title DESC" <?php echo (yarpp_get_option('order')=='post_title DESC'?' selected="selected"':'')?>>title (reverse alphabetical)</option>
259
</select>
260
</td>
261
</tr>
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.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
@@ -28,6 +28,10 @@ Yet Another Related Posts Plugin (YARPP) gives you a list of posts and/or pages
28
29
Since YARPP 1.5, you can just put the `yet-another-related-posts-plugin` directory in your `/wp-content/plugins/` directory, activate the plugin, and you're set! You'll see related posts in single entry (permalink) pages. If all your pages say "no related posts," see the FAQ.
30
31
= Manual installation =
32
33
If you would like to put the related posts display in another part of your theme, or display them in pages other than single entry pages, turn off "auto display" in the YARPP Options, then drop `related_posts()`, `related_pages()`, or `related_entries()` (see below) in your [WP loop](http://codex.wordpress.org/The_Loop). Change any options in the Related Posts (YARPP) Options pane in Admin > Plugins. See Examples in Other Notes for sample code you can drop into your theme.
@@ -95,13 +99,20 @@ I highly recommend you disactivate YARPP, replace it with the new one, and then
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
101
The following feature requests have been made and may be incorporated into a future release. If you have a bug fix, please start a new thread on [the Wordpress.org forums](http://wordpress.org/tags/yet-another-related-posts-plugin).
102
103
* User-defineable stopwords, especially to support other languages, [by request](http://wordpress.org/support/topic/159359)
104
- * Widgetization, [by request](http://wordpress.org/support/topic/160459)
105
* Date and comment count in excerpt, [by request](http://wordpress.org/support/topic/156231)
106
- * RSS feed support: an option to automagically show related posts in RSS feeds, [by request](http://wordpress.org/support/topic/151766).
107
* Sentece-aware excerpts, [by request](http://wordpress.org/support/topic/162465)
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.2
10
+ Stable tag: 2.0.5
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
28
29
Since YARPP 1.5, you can just put the `yet-another-related-posts-plugin` directory in your `/wp-content/plugins/` directory, activate the plugin, and you're set! You'll see related posts in single entry (permalink) pages. If all your pages say "no related posts," see the FAQ.
30
31
+ = Widget =
32
+
33
+ Related posts can also be displayed as a widget. Go to the Design > Widgets options page and add the Related Posts widget. The widget will only be displayed on single entry (permalink) pages. The widget can be used even if the "auto display" option is turned off.
34
+
35
= Manual installation =
36
37
If you would like to put the related posts display in another part of your theme, or display them in pages other than single entry pages, turn off "auto display" in the YARPP Options, then drop `related_posts()`, `related_pages()`, or `related_entries()` (see below) in your [WP loop](http://codex.wordpress.org/The_Loop). Change any options in the Related Posts (YARPP) Options pane in Admin > Plugins. See Examples in Other Notes for sample code you can drop into your theme.
99
* 2.0.4 - what 2.0 should have been
100
* Bugfix: new fulltext query for MySQL 5 compatibility
101
* Bugfix: updated apply_filters to work with WP 2.6
102
+ * 2.0.5
103
+ * Further optimized algorithm - should be faster on most systems. Good bye [subqueries](http://dev.mysql.com/doc/refman/5.0/en/unnamed-views.html)!
104
+ * Bugfix: restored MySQL 4.0 support
105
+ * Bugfix: [widgets required the "auto display" option](http://wordpress.org/support/topic/190454)
106
+ * Bugfix: sometimes default values were not set properly on (re)activation
107
+ * Bugfix: [quotes in HTML tag options would get escaped](http://wordpress.org/support/topic/199139)
108
+ * Bugfix: `user_level` was being checked in a deprecated manner
109
+ * A helpful little tooltip for the admin-only threshold display
110
111
== Future versions ==
112
113
The following feature requests have been made and may be incorporated into a future release. If you have a bug fix, please start a new thread on [the Wordpress.org forums](http://wordpress.org/tags/yet-another-related-posts-plugin).
114
115
* User-defineable stopwords, especially to support other languages, [by request](http://wordpress.org/support/topic/159359)
116
* Date and comment count in excerpt, [by request](http://wordpress.org/support/topic/156231)
117
+ * RSS feed support: an option to automagically show related posts in RSS feeds, [by popular request](http://wordpress.org/support/topic/151766).
118
* Sentece-aware excerpts, [by request](http://wordpress.org/support/topic/162465)
yarpp.php CHANGED
@@ -3,7 +3,7 @@
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
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.5
7
Author: mitcho (Michael Yoshitaka Erlewine)
8
*/
9