Search Meter - Version 2.7.2

Version Description

  • Requires WP 2.8.
  • Fix problem displaying multiple-word searches in WP 3.0.
  • Remove notice messages when debugging.
Download this release

Release Info

Developer bennettmcelwee
Plugin Icon 128x128 Search Meter
Version 2.7.2
Comparing to
See all releases

Code changes from version 2.7.1 to 2.7.2

Files changed (2) hide show
  1. readme.txt +7 -2
  2. search-meter.php +89 -138
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: bennettmcelwee
3
  Donate link: http://www.thunderguy.com/semicolon/wordpress/search-meter-wordpress-plugin/
4
  Tags: search, meter, search-meter, statistics, widget, admin
5
- Requires at least: 2.3
6
- Tested up to: 2.9.2
7
  Stable tag: 2.7.1
8
 
9
  Search Meter tracks what your readers are searching for on your blog. View full details of recent searches or stats for the last day, week or month.
@@ -73,6 +73,11 @@ The [Search Meter home page](http://www.thunderguy.com/semicolon/wordpress/searc
73
 
74
  == Changelog ==
75
 
 
 
 
 
 
76
  = 2.7 =
77
  * Don't show duplicated recent searches
78
  * Add filter list so that search terms with certain words will not show up in recent and popular search lists
2
  Contributors: bennettmcelwee
3
  Donate link: http://www.thunderguy.com/semicolon/wordpress/search-meter-wordpress-plugin/
4
  Tags: search, meter, search-meter, statistics, widget, admin
5
+ Requires at least: 2.8
6
+ Tested up to: 3.0
7
  Stable tag: 2.7.1
8
 
9
  Search Meter tracks what your readers are searching for on your blog. View full details of recent searches or stats for the last day, week or month.
73
 
74
  == Changelog ==
75
 
76
+ = 2.7.2 =
77
+ * Requires WP 2.8.
78
+ * Fix problem displaying multiple-word searches in WP 3.0.
79
+ * Remove notice messages when debugging.
80
+
81
  = 2.7 =
82
  * Don't show duplicated recent searches
83
  * Add filter list so that search terms with certain words will not show up in recent and popular search lists
search-meter.php CHANGED
@@ -3,11 +3,11 @@
3
  Plugin Name: Search Meter
4
  Plugin URI: http://www.thunderguy.com/semicolon/wordpress/search-meter-wordpress-plugin/
5
  Description: Keeps track of what your visitors are searching for. After you have activated this plugin, you can check the Search Meter section in the Dashboard to see what your visitors are searching for on your blog.
6
- Version: 2.7.1
7
  Author: Bennett McElwee
8
  Author URI: http://www.thunderguy.com/semicolon/
9
 
10
- $Revision: 244492 $
11
 
12
 
13
  INSTRUCTIONS
@@ -137,7 +137,7 @@ function sm_get_relative_search_url($term) {
137
  if ($wp_rewrite->using_permalinks()) {
138
  $structure = $wp_rewrite->get_search_permastruct();
139
  if (strpos($structure, '%search%') !== false) {
140
- $relative_url = str_replace('%search%', urlencode($term), $structure);
141
  }
142
  }
143
  if ( ! $relative_url) {
@@ -152,9 +152,9 @@ function sm_get_escaped_filter_regex() {
152
  global $sm_escaped_filter_regex, $wpdb;
153
  if ( ! isset($sm_escaped_filter_regex)) {
154
  $options = get_option('tguy_search_meter');
155
- $filter_words = $options['sm_filter_words'];
156
- if ($filter_words == "") {
157
- $sm_escaped_filter_regex = "";
158
  } else {
159
  $filter_regex = str_replace(' ', '|', preg_quote($filter_words));
160
  $wpdb->escape_by_ref($filter_regex);
@@ -188,143 +188,89 @@ function tguy_sm_init() {
188
 
189
  // Widgets
190
 
191
- if (version_compare($wp_version, '2.8', '>=')) {
192
- add_action('widgets_init', 'tguy_sm_register_widgets');
193
- function tguy_sm_register_widgets() {
194
- register_widget('SM_Popular_Searches_Widget');
195
- register_widget('SM_Recent_Searches_Widget');
 
 
 
 
 
196
  }
197
 
198
- class SM_Popular_Searches_Widget extends WP_Widget {
199
- function SM_Popular_Searches_Widget() {
200
- $widget_ops = array('classname' => 'widget_search_meter', 'description' => __( "A list of the most popular successful searches in the last month"));
201
- $this->WP_Widget('popular_searches', __('Popular Searches'), $widget_ops);
202
- }
203
-
204
- function widget($args, $instance) {
205
- extract($args);
206
- $title = apply_filters('widget_title', empty($instance['popular-searches-title']) ? __('Popular Searches') : $instance['popular-searches-title']);
207
- $count = (int) (empty($instance['popular-searches-number']) ? 5 : $instance['popular-searches-number']);
208
-
209
- echo $before_widget;
210
- if ($title) {
211
- echo $before_title . $title . $after_title;
212
- }
213
- sm_list_popular_searches('', '', sm_constrain_widget_search_count($count));
214
- echo $after_widget;
215
- }
216
-
217
- function update($new_instance, $old_instance){
218
- $instance = $old_instance;
219
- $instance['popular-searches-title'] = strip_tags(stripslashes($new_instance['popular-searches-title']));
220
- $instance['popular-searches-number'] = (int) ($new_instance['popular-searches-number']);
221
- return $instance;
222
- }
223
 
224
- function form($instance){
225
- //Defaults
226
- $instance = wp_parse_args((array) $instance, array('popular-searches-title' => 'Popular Searches', 'popular-searches-number' => 5));
227
-
228
- $title = htmlspecialchars($instance['popular-searches-title']);
229
- $count = htmlspecialchars($instance['popular-searches-number']);
230
-
231
- # Output the options
232
- echo '<p><label for="' . $this->get_field_name('popular-searches-title') . '">' . __('Title:') . ' <input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('popular-searches-title') . '" type="text" value="' . $title . '" /></label></p>';
233
- echo '<p><label for="' . $this->get_field_name('popular-searches-number') . '">' . __('Number of searches to show:') . ' <input id="' . $this->get_field_id('popular-searches-number') . '" name="' . $this->get_field_name('popular-searches-number') . '" type="text" value="' . $count . '" size="3" /></label></p>';
234
- echo '<p><small>Powered by Search Meter</small></p>';
235
  }
 
 
236
  }
237
-
238
- class SM_Recent_Searches_Widget extends WP_Widget {
239
- function SM_Recent_Searches_Widget() {
240
- $widget_ops = array('classname' => 'widget_search_meter', 'description' => __( "A list of the most recent successful searches on your blog"));
241
- $this->WP_Widget('recent_searches', __('Recent Searches'), $widget_ops);
242
- }
243
-
244
- function widget($args, $instance) {
245
- extract($args);
246
- $title = apply_filters('widget_title', empty($instance['recent-searches-title']) ? __('Recent Searches') : $instance['recent-searches-title']);
247
- $count = (int) (empty($instance['recent-searches-number']) ? 5 : $instance['recent-searches-number']);
248
-
249
- echo $before_widget;
250
- if ($title) {
251
- echo $before_title . $title . $after_title;
252
- }
253
- sm_list_recent_searches('', '', sm_constrain_widget_search_count($count));
254
- echo $after_widget;
255
- }
256
-
257
- function update($new_instance, $old_instance){
258
- $instance = $old_instance;
259
- $instance['recent-searches-title'] = strip_tags(stripslashes($new_instance['recent-searches-title']));
260
- $instance['recent-searches-number'] = (int) ($new_instance['recent-searches-number']);
261
- return $instance;
262
- }
263
 
264
- function form($instance){
265
- //Defaults
266
- $instance = wp_parse_args((array) $instance, array('recent-searches-title' => 'Recent Searches', 'recent-searches-number' => 5));
267
-
268
- $title = htmlspecialchars($instance['recent-searches-title']);
269
- $count = htmlspecialchars($instance['recent-searches-number']);
270
-
271
- # Output the options
272
- echo '<p><label for="' . $this->get_field_name('recent-searches-title') . '">' . __('Title:') . ' <input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('recent-searches-title') . '" type="text" value="' . $title . '" /></label></p>';
273
- echo '<p><label for="' . $this->get_field_name('recent-searches-number') . '">' . __('Number of searches to show:') . ' <input id="' . $this->get_field_id('recent-searches-number') . '" name="' . $this->get_field_name('recent-searches-number') . '" type="text" value="' . $count . '" size="3" /></label></p>';
274
- echo '<p><small>Powered by Search Meter</small></p>';
275
- }
276
  }
277
- } else {
278
- add_action('init', 'tguy_sm_register_widgets');
279
- function tguy_sm_register_widgets() {
280
- if (function_exists('register_sidebar_widget') ) {
281
- register_sidebar_widget('Recent Searches', 'sm_list_recent_searches_widget', 'recent_searches');
282
- register_sidebar_widget('Popular Searches', 'sm_list_popular_searches_widget', 'popular_searches');
283
- register_widget_control('Recent Searches', 'sm_list_recent_searches_control', '', '120px');
284
- register_widget_control('Popular Searches', 'sm_list_popular_searches_control', '', '120px');
285
- }
 
 
 
286
  }
 
287
 
288
- function sm_list_popular_searches_widget($args) {
289
- $options = get_option('tguy_search_meter');
290
- $number = sm_constrain_widget_search_count((int)$options['popular-searches-number']);
291
- sm_list_popular_searches('<h2 class="widgettitle">Popular Searches</h2>', '', $number);
292
  }
293
-
294
- function sm_list_popular_searches_control() {
295
- $options = get_option('tguy_search_meter');
296
- if ($_POST["popular-searches-submit"]) {
297
- $options['popular-searches-number'] = (int) $_POST["popular-searches-number"];
298
- update_option('tguy_search_meter', $options);
 
 
 
299
  }
300
- $number = sm_constrain_widget_search_count((int)$options['popular-searches-number']);
301
- ?>
302
- <p>This widget shows the most popular searches in the last month. Only successful searches are listed.</p>
303
- <p><label for="popular-searches-number"><?php _e('Number of searches to show:'); ?> <input style="width: 5ex; text-align: center;" id="popular-searches-number" name="popular-searches-number" type="text" value="<?php echo $number; ?>" /></label></p>
304
- <p><em>Powered by Search Meter</em></p>
305
- <input type="hidden" id="popular-searches-submit" name="popular-searches-submit" value="1" />
306
- <?php
307
  }
308
-
309
- function sm_list_recent_searches_widget($args) {
310
- $options = get_option('tguy_search_meter');
311
- $number = sm_constrain_widget_search_count((int)$options['recent-searches-number']);
312
- sm_list_recent_searches('<h2 class="widgettitle">Recent Searches</h2>', '', $number);
 
313
  }
314
 
315
- function sm_list_recent_searches_control() {
316
- $options = get_option('tguy_search_meter');
317
- if ($_POST["recent-searches-submit"]) {
318
- $options['recent-searches-number'] = (int) $_POST["recent-searches-number"];
319
- update_option('tguy_search_meter', $options);
320
- }
321
- $number = sm_constrain_widget_search_count((int)$options['recent-searches-number']);
322
- ?>
323
- <p>This widget shows what people have recently searched for. Only successful searches are listed.</p>
324
- <p><label for="recent-searches-number"><?php _e('Number of searches to show:'); ?> <input style="width: 5ex; text-align: center;" id="recent-searches-number" name="recent-searches-number" type="text" value="<?php echo $number; ?>" /></label></p>
325
- <p><em>Powered by Search Meter</em></p>
326
- <input type="hidden" id="recent-searches-submit" name="recent-searches-submit" value="1" />
327
- <?php
328
  }
329
  }
330
 
@@ -469,7 +415,7 @@ function tguy_sm_reset_stats() {
469
 
470
  function tguy_sm_add_admin_pages() {
471
  $options = get_option('tguy_search_meter');
472
- $view_stats_capability = $options['sm_view_stats_capability'];
473
  if ($view_stats_capability == '') {
474
  $view_stats_capability = TGUY_SM_DEFAULT_VIEW_STATS_CAPABILITY;
475
  }
@@ -477,6 +423,11 @@ function tguy_sm_add_admin_pages() {
477
  add_options_page('Search Meter', 'Search Meter', TGUY_SM_OPTIONS_CAPABILITY, __FILE__, 'tguy_sm_options_page');
478
  }
479
 
 
 
 
 
 
480
 
481
  // Display information
482
 
@@ -535,9 +486,9 @@ div.sm-stats-clear {
535
  }
536
 
537
  function tguy_sm_stats_page() {
538
- $recent_count = intval($_GET['recent']);
539
- if (0 < $recent_count) {
540
- $do_show_details = intval($_GET['details']);
541
  tguy_sm_recent_page($recent_count, $do_show_details);
542
  } else {
543
  tguy_sm_summary_page();
@@ -783,7 +734,7 @@ function tguy_sm_options_page() {
783
  echo '<div id="message" class="updated fade"><p><strong>Statistics have been reset.</strong></p></div>';
784
  }
785
  $options = get_option('tguy_search_meter');
786
- $view_stats_capability = $options['sm_view_stats_capability'];
787
  if ($view_stats_capability == '') {
788
  $view_stats_capability = TGUY_SM_DEFAULT_VIEW_STATS_CAPABILITY;
789
  }
@@ -828,14 +779,14 @@ function tguy_sm_options_page() {
828
  <label for="sm_filter_words">When a search term contains any of these words, it will be filtered
829
  and will not show up in the Recent Searches or Popular Searches widgets. This will match inside words,
830
  so &#8220;press&#8221; will match &#8220;WordPress&#8221;.</label>
831
- <textarea name="sm_filter_words" rows="3" cols="40" id="sm_filter_words" class="large-text code"><?php echo esc_html($options['sm_filter_words']); ?></textarea>
832
  </fieldset>
833
  </td>
834
  </tr>
835
  <tr>
836
  <th class="th-full" scope="row" colspan="2">
837
  <label for="sm_details_verbose">
838
- <input type="checkbox" id="sm_details_verbose" name="sm_details_verbose" <?php echo ($options['sm_details_verbose']==true?"checked=\"checked\"":"") ?> />
839
  Keep detailed information about recent searches (taken from HTTP headers)
840
  </label>
841
  </th>
@@ -843,7 +794,7 @@ function tguy_sm_options_page() {
843
  <tr>
844
  <th class="th-full" scope="row" colspan="2">
845
  <label for="sm_disable_donation">
846
- <input type="checkbox" id="sm_disable_donation" name="sm_disable_donation" <?php echo ($options['sm_disable_donation']==true?"checked=\"checked\"":"") ?> />
847
  Hide the &#8220;Do you find this plugin useful?&#8221; box
848
  </label>
849
  </th>
@@ -876,7 +827,7 @@ function tguy_sm_options_page() {
876
 
877
  <p>For information and updates, see the <a href="http://www.thunderguy.com/semicolon/wordpress/search-meter-wordpress-plugin/">Search Meter home page</a>. At that page, you can also offer suggestions, request new features or report problems.</p>
878
 
879
- <?php if (!$options['sm_disable_donation']) { tguy_sm_show_donation_message(); } ?>
880
 
881
  </div>
882
  <?php
3
  Plugin Name: Search Meter
4
  Plugin URI: http://www.thunderguy.com/semicolon/wordpress/search-meter-wordpress-plugin/
5
  Description: Keeps track of what your visitors are searching for. After you have activated this plugin, you can check the Search Meter section in the Dashboard to see what your visitors are searching for on your blog.
6
+ Version: 2.7.2
7
  Author: Bennett McElwee
8
  Author URI: http://www.thunderguy.com/semicolon/
9
 
10
+ $Revision: 261343 $
11
 
12
 
13
  INSTRUCTIONS
137
  if ($wp_rewrite->using_permalinks()) {
138
  $structure = $wp_rewrite->get_search_permastruct();
139
  if (strpos($structure, '%search%') !== false) {
140
+ $relative_url = str_replace('%search%', rawurlencode($term), $structure);
141
  }
142
  }
143
  if ( ! $relative_url) {
152
  global $sm_escaped_filter_regex, $wpdb;
153
  if ( ! isset($sm_escaped_filter_regex)) {
154
  $options = get_option('tguy_search_meter');
155
+ $filter_words = tguy_sm_array_value($options, 'sm_filter_words');
156
+ if ($filter_words == '') {
157
+ $sm_escaped_filter_regex = '';
158
  } else {
159
  $filter_regex = str_replace(' ', '|', preg_quote($filter_words));
160
  $wpdb->escape_by_ref($filter_regex);
188
 
189
  // Widgets
190
 
191
+ add_action('widgets_init', 'tguy_sm_register_widgets');
192
+ function tguy_sm_register_widgets() {
193
+ register_widget('SM_Popular_Searches_Widget');
194
+ register_widget('SM_Recent_Searches_Widget');
195
+ }
196
+
197
+ class SM_Popular_Searches_Widget extends WP_Widget {
198
+ function SM_Popular_Searches_Widget() {
199
+ $widget_ops = array('classname' => 'widget_search_meter', 'description' => __( "A list of the most popular successful searches in the last month"));
200
+ $this->WP_Widget('popular_searches', __('Popular Searches'), $widget_ops);
201
  }
202
 
203
+ function widget($args, $instance) {
204
+ extract($args);
205
+ $title = apply_filters('widget_title', empty($instance['popular-searches-title']) ? __('Popular Searches') : $instance['popular-searches-title']);
206
+ $count = (int) (empty($instance['popular-searches-number']) ? 5 : $instance['popular-searches-number']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
 
208
+ echo $before_widget;
209
+ if ($title) {
210
+ echo $before_title . $title . $after_title;
 
 
 
 
 
 
 
 
211
  }
212
+ sm_list_popular_searches('', '', sm_constrain_widget_search_count($count));
213
+ echo $after_widget;
214
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
 
216
+ function update($new_instance, $old_instance){
217
+ $instance = $old_instance;
218
+ $instance['popular-searches-title'] = strip_tags(stripslashes($new_instance['popular-searches-title']));
219
+ $instance['popular-searches-number'] = (int) ($new_instance['popular-searches-number']);
220
+ return $instance;
 
 
 
 
 
 
 
221
  }
222
+
223
+ function form($instance){
224
+ //Defaults
225
+ $instance = wp_parse_args((array) $instance, array('popular-searches-title' => 'Popular Searches', 'popular-searches-number' => 5));
226
+
227
+ $title = htmlspecialchars($instance['popular-searches-title']);
228
+ $count = htmlspecialchars($instance['popular-searches-number']);
229
+
230
+ # Output the options
231
+ echo '<p><label for="' . $this->get_field_name('popular-searches-title') . '">' . __('Title:') . ' <input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('popular-searches-title') . '" type="text" value="' . $title . '" /></label></p>';
232
+ echo '<p><label for="' . $this->get_field_name('popular-searches-number') . '">' . __('Number of searches to show:') . ' <input id="' . $this->get_field_id('popular-searches-number') . '" name="' . $this->get_field_name('popular-searches-number') . '" type="text" value="' . $count . '" size="3" /></label></p>';
233
+ echo '<p><small>Powered by Search Meter</small></p>';
234
  }
235
+ }
236
 
237
+ class SM_Recent_Searches_Widget extends WP_Widget {
238
+ function SM_Recent_Searches_Widget() {
239
+ $widget_ops = array('classname' => 'widget_search_meter', 'description' => __( "A list of the most recent successful searches on your blog"));
240
+ $this->WP_Widget('recent_searches', __('Recent Searches'), $widget_ops);
241
  }
242
+
243
+ function widget($args, $instance) {
244
+ extract($args);
245
+ $title = apply_filters('widget_title', empty($instance['recent-searches-title']) ? __('Recent Searches') : $instance['recent-searches-title']);
246
+ $count = (int) (empty($instance['recent-searches-number']) ? 5 : $instance['recent-searches-number']);
247
+
248
+ echo $before_widget;
249
+ if ($title) {
250
+ echo $before_title . $title . $after_title;
251
  }
252
+ sm_list_recent_searches('', '', sm_constrain_widget_search_count($count));
253
+ echo $after_widget;
 
 
 
 
 
254
  }
255
+
256
+ function update($new_instance, $old_instance){
257
+ $instance = $old_instance;
258
+ $instance['recent-searches-title'] = strip_tags(stripslashes($new_instance['recent-searches-title']));
259
+ $instance['recent-searches-number'] = (int) ($new_instance['recent-searches-number']);
260
+ return $instance;
261
  }
262
 
263
+ function form($instance){
264
+ //Defaults
265
+ $instance = wp_parse_args((array) $instance, array('recent-searches-title' => 'Recent Searches', 'recent-searches-number' => 5));
266
+
267
+ $title = htmlspecialchars($instance['recent-searches-title']);
268
+ $count = htmlspecialchars($instance['recent-searches-number']);
269
+
270
+ # Output the options
271
+ echo '<p><label for="' . $this->get_field_name('recent-searches-title') . '">' . __('Title:') . ' <input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('recent-searches-title') . '" type="text" value="' . $title . '" /></label></p>';
272
+ echo '<p><label for="' . $this->get_field_name('recent-searches-number') . '">' . __('Number of searches to show:') . ' <input id="' . $this->get_field_id('recent-searches-number') . '" name="' . $this->get_field_name('recent-searches-number') . '" type="text" value="' . $count . '" size="3" /></label></p>';
273
+ echo '<p><small>Powered by Search Meter</small></p>';
 
 
274
  }
275
  }
276
 
415
 
416
  function tguy_sm_add_admin_pages() {
417
  $options = get_option('tguy_search_meter');
418
+ $view_stats_capability = tguy_sm_array_value($options, 'sm_view_stats_capability');
419
  if ($view_stats_capability == '') {
420
  $view_stats_capability = TGUY_SM_DEFAULT_VIEW_STATS_CAPABILITY;
421
  }
423
  add_options_page('Search Meter', 'Search Meter', TGUY_SM_OPTIONS_CAPABILITY, __FILE__, 'tguy_sm_options_page');
424
  }
425
 
426
+ // This is here to avoid E_NOTICE when indexing nonexistent array keys. There's probably a better solution.
427
+ function tguy_sm_array_value(&$array, $key) {
428
+ return array_key_exists($key, $array) ? $array[$key] : null;
429
+ }
430
+
431
 
432
  // Display information
433
 
486
  }
487
 
488
  function tguy_sm_stats_page() {
489
+ if (array_key_exists('recent', $_GET)) {
490
+ $recent_count = intval($_GET['recent']);
491
+ $do_show_details = array_key_exists('details', $_GET) && $_GET['details'];
492
  tguy_sm_recent_page($recent_count, $do_show_details);
493
  } else {
494
  tguy_sm_summary_page();
734
  echo '<div id="message" class="updated fade"><p><strong>Statistics have been reset.</strong></p></div>';
735
  }
736
  $options = get_option('tguy_search_meter');
737
+ $view_stats_capability = tguy_sm_array_value($options, 'sm_view_stats_capability');
738
  if ($view_stats_capability == '') {
739
  $view_stats_capability = TGUY_SM_DEFAULT_VIEW_STATS_CAPABILITY;
740
  }
779
  <label for="sm_filter_words">When a search term contains any of these words, it will be filtered
780
  and will not show up in the Recent Searches or Popular Searches widgets. This will match inside words,
781
  so &#8220;press&#8221; will match &#8220;WordPress&#8221;.</label>
782
+ <textarea name="sm_filter_words" rows="3" cols="40" id="sm_filter_words" class="large-text code"><?php echo esc_html(tguy_sm_array_value($options, 'sm_filter_words')); ?></textarea>
783
  </fieldset>
784
  </td>
785
  </tr>
786
  <tr>
787
  <th class="th-full" scope="row" colspan="2">
788
  <label for="sm_details_verbose">
789
+ <input type="checkbox" id="sm_details_verbose" name="sm_details_verbose" <?php echo (tguy_sm_array_value($options, 'sm_details_verbose') ? 'checked="checked"' : '') ?> />
790
  Keep detailed information about recent searches (taken from HTTP headers)
791
  </label>
792
  </th>
794
  <tr>
795
  <th class="th-full" scope="row" colspan="2">
796
  <label for="sm_disable_donation">
797
+ <input type="checkbox" id="sm_disable_donation" name="sm_disable_donation" <?php echo (tguy_sm_array_value($options, 'sm_disable_donation') ? 'checked="checked"' : '') ?> />
798
  Hide the &#8220;Do you find this plugin useful?&#8221; box
799
  </label>
800
  </th>
827
 
828
  <p>For information and updates, see the <a href="http://www.thunderguy.com/semicolon/wordpress/search-meter-wordpress-plugin/">Search Meter home page</a>. At that page, you can also offer suggestions, request new features or report problems.</p>
829
 
830
+ <?php if ( ! tguy_sm_array_value($options, 'sm_disable_donation')) { tguy_sm_show_donation_message(); } ?>
831
 
832
  </div>
833
  <?php