Yet Another Related Posts Plugin (YARPP) - Version 4.0b8

Version Description

Download this release

Release Info

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

Code changes from version 3.6b6 to 4.0b8

cache-tables.php CHANGED
@@ -284,7 +284,7 @@ class YARPP_Cache_Tables extends YARPP_Cache {
284
if ( !is_int($ID) )
285
return false;
286
287
- // @since 3.6: compute fresh each time, instead of using cache table.
288
// the old keyword cache would basically have to be recomputed every time the
289
// relatedness cache was recomputed, but no more, so there's no point in keeping
290
// these around separately.
284
if ( !is_int($ID) )
285
return false;
286
287
+ // @since 4: compute fresh each time, instead of using cache table.
288
// the old keyword cache would basically have to be recomputed every time the
289
// relatedness cache was recomputed, but no more, so there's no point in keeping
290
// these around separately.
class-admin.php CHANGED
@@ -28,6 +28,7 @@ class YARPP_Admin {
28
add_action( 'admin_init', array( $this, 'ajax_register' ) );
29
add_action( 'admin_menu', array( $this, 'ui_register' ) );
30
add_filter( 'current_screen', array( $this, 'settings_screen' ) );
31
// new in 3.3: set default meta boxes to show:
32
add_filter( 'default_hidden_meta_boxes', array( $this, 'default_hidden_meta_boxes' ), 10, 2 );
33
}
@@ -68,7 +69,7 @@ class YARPP_Admin {
68
add_action( 'wp_ajax_yarpp_display', array( $this, 'ajax_display' ) );
69
add_action( 'wp_ajax_yarpp_optin_data', array( $this, 'ajax_optin_data' ) );
70
add_action( 'wp_ajax_yarpp_optin', array( $this, 'ajax_optin' ) );
71
- add_action( 'wp_ajax_yarpp_optin_dismiss', array( $this, 'ajax_optin_dismiss' ) );
72
}
73
}
74
@@ -81,8 +82,9 @@ class YARPP_Admin {
81
add_action( 'admin_print_footer_scripts', array( $this, 'pointer_script' ) );
82
}
83
} elseif ( !$this->core->get_option('optin') &&
84
- current_user_can('manage_options') &&
85
- !get_user_option( 'yarpp_saw_optin' ) ) {
86
$user = get_current_user_id();
87
update_user_option( $user, 'yarpp_saw_optin', true );
88
add_action( 'admin_notices', array( $this, 'optin_notice' ) );
@@ -159,9 +161,9 @@ class YARPP_Admin {
159
160
public function help_optin() {
161
// todo: i18n
162
- echo '<p>' . sprintf( "With your permission, YARPP will send information about YARPP's settings, usage, and environment back to a central server at %s.", '<code>yarpp.org</code>') . ' ';
163
- echo "This information will be used to improve YARPP in the future and help decide future development decisions for YARPP." . ' ';
164
- echo '<strong>' . "Contributing this data will help make YARPP better for you and for other YARPP users." . '</strong></p>';
165
166
if ( !$this->core->get_option( 'optin' ) ) {
167
echo '<p>';
@@ -195,12 +197,34 @@ class YARPP_Admin {
195
</script>\n";
196
}
197
198
- function optin_notice() {
199
- echo '<div class="updated fade">';
200
- echo '<p>' . sprintf( "With your permission, YARPP will send information about YARPP's settings, usage, and environment back to a central server at %s.", '<code>yarpp.org</code>') . ' ';
201
- echo "This information will be used to improve YARPP in the future and help decide future development decisions for YARPP." . ' ';
202
- echo '<strong>' . "Contributing this data will help make YARPP better for you and for other YARPP users." . '</strong></p><p>';
203
$this->print_optin_button();
204
echo '</p></div>';
205
}
206
@@ -236,6 +260,19 @@ class YARPP_Admin {
236
return $text;
237
}
238
239
// since 3.3
240
function enqueue() {
241
$version = defined('WP_DEBUG') && WP_DEBUG ? time() : YARPP_VERSION;
@@ -344,7 +381,7 @@ jQuery(function () {
344
return $hidden;
345
}
346
347
- // @since 3.6: UI to copy templates
348
function can_copy_templates() {
349
$theme_dir = get_stylesheet_directory();
350
// If we can't write to the theme, return false
@@ -476,4 +513,15 @@ jQuery(function () {
476
echo 'ok';
477
exit;
478
}
479
}
28
add_action( 'admin_init', array( $this, 'ajax_register' ) );
29
add_action( 'admin_menu', array( $this, 'ui_register' ) );
30
add_filter( 'current_screen', array( $this, 'settings_screen' ) );
31
+ add_filter( 'screen_settings', array( $this, 'render_screen_settings' ), 10, 2 );
32
// new in 3.3: set default meta boxes to show:
33
add_filter( 'default_hidden_meta_boxes', array( $this, 'default_hidden_meta_boxes' ), 10, 2 );
34
}
69
add_action( 'wp_ajax_yarpp_display', array( $this, 'ajax_display' ) );
70
add_action( 'wp_ajax_yarpp_optin_data', array( $this, 'ajax_optin_data' ) );
71
add_action( 'wp_ajax_yarpp_optin', array( $this, 'ajax_optin' ) );
72
+ add_action( 'wp_ajax_yarpp_set_display_code', array( $this, 'ajax_set_display_code' ) );
73
}
74
}
75
82
add_action( 'admin_print_footer_scripts', array( $this, 'pointer_script' ) );
83
}
84
} elseif ( !$this->core->get_option('optin') &&
85
+ current_user_can('manage_options') &&
86
+ !get_user_option( 'yarpp_saw_optin' )
87
+ ) {
88
$user = get_current_user_id();
89
update_user_option( $user, 'yarpp_saw_optin', true );
90
add_action( 'admin_notices', array( $this, 'optin_notice' ) );
161
162
public function help_optin() {
163
// todo: i18n
164
+ echo '<p>' . sprintf( __( "With your permission, YARPP will send information about YARPP's settings, usage, and environment back to a central server at %s.", 'yarpp' ), '<code>yarpp.org</code>') . ' ';
165
+ echo __( "This information will be used to improve YARPP in the future and help decide future development decisions for YARPP.", 'yarpp' ) . ' ';
166
+ echo '<strong>' . __( "Contributing this data will help make YARPP better for you and for other YARPP users.", 'yarpp' ) . '</strong></p>';
167
168
if ( !$this->core->get_option( 'optin' ) ) {
169
echo '<p>';
197
</script>\n";
198
}
199
200
+ function optin_notice( $pool = null ) {
201
+ echo '<div class="updated fade"><p>';
202
+
203
+ // @todo i18n
204
+ if ( is_null( $pool ) );
205
+ $pool = $this->core->get_option( 'pools[message]' );
206
+ switch ( $pool ) {
207
+ case 0:
208
+ echo "Help make YARPP better by sending information about YARPP's settings and usage statistics.";
209
+ break;
210
+ case 1:
211
+ echo sprintf( __( "With your permission, YARPP will send information about YARPP's settings, usage, and environment back to a central server at %s.", 'yarpp' ), '<code>yarpp.org</code>') . ' ';
212
+ echo __( "This information will be used to improve YARPP in the future and help decide future development decisions for YARPP.", 'yarpp' ) . ' ';
213
+ echo '<strong>' . __( "Contributing this data will help make YARPP better for you and for other YARPP users.", 'yarpp' ) . '</strong>';
214
+ break;
215
+ case 2:
216
+ echo "<strong>Help make YARPP better.</strong> ";
217
+ echo sprintf( "With your permission, YARPP will send information about YARPP's settings, usage, and environment back to a central server at %s.", '<code>yarpp.org</code>') . ' ';
218
+ echo "This information will be used to improve YARPP in the future and help decide future development decisions for YARPP.";
219
+ break;
220
+ case 3:
221
+ echo "YARPP can automatically collect diagnostic and usage information from your site and send it to YARPP's author for analysis. The information is sent only with your consent. ";
222
+ echo '<strong>' . "Contributing this data will help make YARPP better for you and for other YARPP users." . '</strong>';
223
+ }
224
+
225
+ echo '</p><p>';
226
$this->print_optin_button();
227
+ echo '<a class="button" href="options-general.php?page=yarpp#help-optin">' . __( 'Learn More', 'yarpp' ) . '</a>';
228
echo '</p></div>';
229
}
230
260
return $text;
261
}
262
263
+ function render_screen_settings( $output, $current_screen ) {
264
+ if ( $current_screen->id != 'settings_page_yarpp' )
265
+ return $output;
266
+
267
+ $output .= "<div id='yarpp_extra_screen_settings'><label for='yarpp_display_code'><input type='checkbox' name='yarpp_display_code' id='yarpp_display_code'";
268
+ $output .= checked( $this->core->get_option('display_code'), true, false );
269
+ $output .= " />";
270
+ $output .= __('Show example code output', 'yarpp');
271
+ $output .= '</label></div>';
272
+
273
+ return $output;
274
+ }
275
+
276
// since 3.3
277
function enqueue() {
278
$version = defined('WP_DEBUG') && WP_DEBUG ? time() : YARPP_VERSION;
381
return $hidden;
382
}
383
384
+ // @since 4: UI to copy templates
385
function can_copy_templates() {
386
$theme_dir = get_stylesheet_directory();
387
// If we can't write to the theme, return false
513
echo 'ok';
514
exit;
515
}
516
+
517
+ function ajax_set_display_code() {
518
+ check_ajax_referer( 'yarpp_set_display_code' );
519
+
520
+ header("HTTP/1.1 200");
521
+ header("Content-Type: text; charset=UTF-8");
522
+
523
+ $data = yarpp_set_option( 'display_code', isset($_REQUEST['checked']) );
524
+ echo 'ok';
525
+ exit;
526
+ }
527
}
class-core.php CHANGED
@@ -60,15 +60,15 @@ class YARPP {
60
61
private function load_default_options() {
62
$this->default_options = array(
63
- 'threshold' => 5,
64
- 'limit' => 5,
65
'excerpt_length' => 10,
66
'recent' => false, // new in 3.5
67
'before_title' => '<li>',
68
'after_title' => '</li>',
69
'before_post' => ' <small>',
70
'after_post' => '</small>',
71
- 'before_related' => '<p>'.__('Related posts:','yarpp').'</p><ol>',
72
'after_related' => '</ol>',
73
'no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
74
'order' => 'score DESC',
@@ -78,7 +78,7 @@ class YARPP {
78
'rss_after_title' => '</li>',
79
'rss_before_post' => ' <small>',
80
'rss_after_post' => '</small>',
81
- 'rss_before_related' => '<p>'.__('Related posts:','yarpp').'</p><ol>',
82
'rss_after_related' => '</ol>',
83
'rss_no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
84
'rss_order' => 'score DESC',
@@ -89,7 +89,6 @@ class YARPP {
89
'rss_template' => false, // new in 3.5
90
'show_pass_post' => false,
91
'cross_relate' => false,
92
- 'auto_display' => true,
93
'rss_display' => false, // changed default in 3.1.7
94
'rss_excerpt_display' => true,
95
'promote_yarpp' => false,
@@ -105,11 +104,15 @@ class YARPP {
105
)
106
),
107
'require_tax' => array(), // new in 3.5
108
- 'optin' => false, // new in 3.6
109
- 'thumbnails_heading' => __('Related posts:','yarpp'), // new in 3.6
110
- 'thumbnails_default' => plugins_url( 'default.png', __FILE__ ), // new in 3.6
111
- 'rss_thumbnails_heading' => __('Related posts:','yarpp'), // new in 3.6
112
- 'rss_thumbnails_default' => plugins_url( 'default.png', __FILE__ ) // new in 3.6
113
);
114
}
115
@@ -229,7 +232,7 @@ class YARPP {
229
230
/*
231
* DIAGNOSTICS
232
- * @since 3.6 moved into separate functions. Note return value types can differ.
233
*/
234
235
function diagnostic_myisam_posts() {
@@ -268,6 +271,18 @@ class YARPP {
268
return current_theme_supports( 'post-thumbnails', 'post' );
269
}
270
271
/*
272
* UPGRADE ROUTINES
273
*/
@@ -291,6 +306,8 @@ class YARPP {
291
$this->upgrade_3_4_4b4();
292
if ( $last_version && version_compare('3.5.2b2', $last_version) > 0 )
293
$this->upgrade_3_5_2b2();
294
295
$this->cache->upgrade($last_version);
296
// flush cache in 3.4.1b5 as 3.4 messed up calculations.
@@ -307,8 +324,8 @@ class YARPP {
307
global $wpdb;
308
309
$yarpp_3_3_options = array(
310
- 'threshold' => 5,
311
- 'limit' => 5,
312
'template_file' => '', // new in 2.2
313
'excerpt_length' => 10,
314
'recent_number' => 12,
@@ -317,7 +334,7 @@ class YARPP {
317
'after_title' => '</li>',
318
'before_post' => ' <small>',
319
'after_post' => '</small>',
320
- 'before_related' => '<p>'.__('Related posts:','yarpp').'</p><ol>',
321
'after_related' => '</ol>',
322
'no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
323
'order' => 'score DESC',
@@ -328,7 +345,7 @@ class YARPP {
328
'rss_after_title' => '</li>',
329
'rss_before_post' => ' <small>',
330
'rss_after_post' => '</small>',
331
- 'rss_before_related' => '<p>'.__('Related posts:','yarpp').'</p><ol>',
332
'rss_after_related' => '</ol>',
333
'rss_no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
334
'rss_order' => 'score DESC',
@@ -502,17 +519,14 @@ class YARPP {
502
yarpp_set_option(array('weight' => $weight));
503
}
504
}
505
-
506
- function is_happy() {
507
- $stats = $this->cache->stats();
508
-
509
- if ( !(array_sum( $stats ) > 0) )
510
- return false;
511
-
512
- $sum = array_sum(array_map('array_product', array_map(null, array_values($stats), array_keys($stats))));
513
- $avg = $sum / array_sum( $stats );
514
515
- return $this->cache->cache_status() > 0.1 && $avg > 2;
516
}
517
518
private $post_types = null;
@@ -568,16 +582,15 @@ class YARPP {
568
'threshold', 'limit', 'excerpt_length', 'recent', 'rss_limit',
569
'rss_excerpt_length', 'past_only', 'show_excerpt', 'rss_show_excerpt',
570
'template', 'rss_template', 'show_pass_post', 'cross_relate',
571
- 'auto_display', 'rss_display', 'rss_excerpt_display', 'promote_yarpp',
572
- 'rss_promote_yarpp', 'myisam_override', 'weight', 'require_tax'
573
));
574
$check_changed = array(
575
'before_title', 'after_title', 'before_post', 'after_post',
576
- 'before_related', 'after_related', 'no_results', 'order',
577
- 'rss_before_title', 'rss_after_title', 'rss_before_post', 'rss_after_post',
578
- 'rss_before_related', 'rss_after_related', 'rss_no_results', 'rss_order',
579
- 'exclude', 'thumbnails_heading', 'thumbnails_default', 'rss_thumbnails_heading',
580
- 'rss_thumbnails_default'
581
);
582
583
$data = array(
@@ -594,7 +607,8 @@ class YARPP {
594
'myisam_posts' => $this->diagnostic_myisam_posts(),
595
'fulltext_indices' => $this->diagnostic_fulltext_indices(),
596
'hidden_metaboxes' => $this->diagnostic_hidden_metaboxes(),
597
- 'post_thumbnails' => $this->diagnostic_post_thumbnails()
598
),
599
'stats' => array(
600
'counts' => array(),
@@ -612,14 +626,21 @@ class YARPP {
612
'plugins' => array(
613
'active' => implode( '|', get_option( 'active_plugins', array() ) ),
614
'sitewide' => implode( '|', get_site_option( 'active_sitewide_plugins', array() ) )
615
- )
616
);
617
618
$changed = array();
619
foreach ( $check_changed as $key ) {
620
if ( $yarpp->default_options[$key] != $settings[$key] )
621
$changed[] = $key;
622
}
623
$data['yarpp']['changed_settings'] = implode( '|', $changed );
624
625
if ( method_exists( $yarpp->cache, 'cache_status' ) )
@@ -729,6 +750,7 @@ class YARPP {
729
}
730
$this->prep_query( $current_query->is_feed );
731
$related_query = $wp_query; // backwards compatibility
732
733
// @todo: add these classes after the fact and include information about whether any results were given
734
$output = "<div class='";
@@ -736,7 +758,10 @@ class YARPP {
736
$output .= "yarpp-related";
737
else
738
$output .= "yarpp-related-{$domain}";
739
$output .= "'>\n";
740
if ( 'metabox' == $domain ) {
741
include(YARPP_DIR . '/template-metabox.php');
742
} elseif ( !!$template && 'thumbnails' == $template ) {
@@ -765,11 +790,11 @@ class YARPP {
765
wp_reset_postdata();
766
$pagenow = $current_pagenow; unset($current_pagenow);
767
768
- if ($promote_yarpp && $domain != 'metabox')
769
$output .= "<p>".sprintf(__("Related posts brought to you by <a href='%s'>Yet Another Related Posts Plugin</a>.",'yarpp'), 'http://yarpp.org')."</p>\n";
770
771
if ( $optin )
772
- $output .= "<img src='http://yarpp.org/pixel.png?" . md5(get_bloginfo('url')) . "'/>\n";
773
774
$output .= "</div>\n";
775
@@ -979,19 +1004,33 @@ class YARPP {
979
*/
980
981
function the_content($content) {
982
- if ( is_feed() ||
983
- !$this->get_option('auto_display') ||
984
- !is_singular(array('post')) )
985
- return $content;
986
987
if ( $this->get_option('cross_relate') )
988
- $type = $this->get_post_types();
989
- else if ( 'page' == get_post_type() )
990
- $type = array( 'page' );
991
else
992
- $type = array( 'post' );
993
994
- return $content . $this->display_related(null, array('post_type' => $type, 'domain' => 'website'), false);
995
}
996
997
function the_content_feed($content) {
@@ -1042,7 +1081,7 @@ class YARPP {
1042
return $result;
1043
}
1044
1045
- // @since 3.6: optional collection of (default off)
1046
function optin_ping() {
1047
if ( get_transient( 'yarpp_optin' ) )
1048
return true;
60
61
private function load_default_options() {
62
$this->default_options = array(
63
+ 'threshold' => 4, // changed default in 4
64
+ 'limit' => 4, // changed default in 4
65
'excerpt_length' => 10,
66
'recent' => false, // new in 3.5
67
'before_title' => '<li>',
68
'after_title' => '</li>',
69
'before_post' => ' <small>',
70
'after_post' => '</small>',
71
+ 'before_related' => '<h3>'.__('Related posts:','yarpp').'</h3><ol>',
72
'after_related' => '</ol>',
73
'no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
74
'order' => 'score DESC',
78
'rss_after_title' => '</li>',
79
'rss_before_post' => ' <small>',
80
'rss_after_post' => '</small>',
81
+ 'rss_before_related' => '<h3>'.__('Related posts:','yarpp').'</h3><ol>',
82
'rss_after_related' => '</ol>',
83
'rss_no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
84
'rss_order' => 'score DESC',
89
'rss_template' => false, // new in 3.5
90
'show_pass_post' => false,
91
'cross_relate' => false,
92
'rss_display' => false, // changed default in 3.1.7
93
'rss_excerpt_display' => true,
94
'promote_yarpp' => false,
104
)
105
),
106
'require_tax' => array(), // new in 3.5
107
+ 'optin' => false, // new in 4
108
+ 'thumbnails_heading' => __('Related posts:','yarpp'), // new in 4
109
+ 'thumbnails_default' => plugins_url( 'default.png', __FILE__ ), // new in 4
110
+ 'rss_thumbnails_heading' => __('Related posts:','yarpp'), // new in 4
111
+ 'rss_thumbnails_default' => plugins_url( 'default.png', __FILE__ ), // new in 4
112
+ 'display_code' => false, // new in 4
113
+ 'auto_display_archive' => false, // new in 4
114
+ 'auto_display_post_types' => array( 'post' ), // new in 4, replacing auto_display
115
+ 'pools' => array( 'message' => mt_rand(0,3) ), // new in 4
116
);
117
}
118
232
233
/*
234
* DIAGNOSTICS
235
+ * @since 4 moved into separate functions. Note return value types can differ.
236
*/
237
238
function diagnostic_myisam_posts() {
271
return current_theme_supports( 'post-thumbnails', 'post' );
272
}
273
274
+ function diagnostic_happy() {
275
+ $stats = $this->cache->stats();
276
+
277
+ if ( !(array_sum( $stats ) > 0) )
278
+ return false;
279
+
280
+ $sum = array_sum(array_map('array_product', array_map(null, array_values($stats), array_keys($stats))));
281
+ $avg = $sum / array_sum( $stats );
282
+
283
+ return $this->cache->cache_status() > 0.1 && $avg > 2;
284
+ }
285
+
286
/*
287
* UPGRADE ROUTINES
288
*/
306
$this->upgrade_3_4_4b4();
307
if ( $last_version && version_compare('3.5.2b2', $last_version) > 0 )
308
$this->upgrade_3_5_2b2();
309
+ if ( $last_version && version_compare('3.6b7', $last_version) > 0 )
310
+ $this->upgrade_3_6b7();
311
312
$this->cache->upgrade($last_version);
313
// flush cache in 3.4.1b5 as 3.4 messed up calculations.
324
global $wpdb;
325
326
$yarpp_3_3_options = array(
327
+ 'threshold' => 4,
328
+ 'limit' => 4,
329
'template_file' => '', // new in 2.2
330
'excerpt_length' => 10,
331
'recent_number' => 12,
334
'after_title' => '</li>',
335
'before_post' => ' <small>',
336
'after_post' => '</small>',
337
+ 'before_related' => '<h3>'.__('Related posts:','yarpp').'</h3><ol>',
338
'after_related' => '</ol>',
339
'no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
340
'order' => 'score DESC',
345
'rss_after_title' => '</li>',
346
'rss_before_post' => ' <small>',
347
'rss_after_post' => '</small>',
348
+ 'rss_before_related' => '<h3>'.__('Related posts:','yarpp').'</h3><ol>',
349
'rss_after_related' => '</ol>',
350
'rss_no_results' => '<p>'.__('No related posts.','yarpp').'</p>',
351
'rss_order' => 'score DESC',
519
yarpp_set_option(array('weight' => $weight));
520
}
521
}
522
523
+ function upgrade_3_6b7() {
524
+ // migrate auto_display setting to auto_display_post_types
525
+ $options = $this->get_option();
526
+ $options['auto_display_post_types'] = $options['auto_display'] ?
527
+ array( 'post' ) : array();
528
+ unset( $options['auto_display'] );
529
+ update_option( 'yarpp', $options );
530
}
531
532
private $post_types = null;
582
'threshold', 'limit', 'excerpt_length', 'recent', 'rss_limit',
583
'rss_excerpt_length', 'past_only', 'show_excerpt', 'rss_show_excerpt',
584
'template', 'rss_template', 'show_pass_post', 'cross_relate',
585
+ 'rss_display', 'rss_excerpt_display', 'promote_yarpp', 'rss_promote_yarpp',
586
+ 'myisam_override', 'weight', 'require_tax', 'auto_display_archive'
587
));
588
$check_changed = array(
589
'before_title', 'after_title', 'before_post', 'after_post',
590
+ 'after_related', 'no_results', 'order', 'rss_before_title',
591
+ 'rss_after_title', 'rss_before_post', 'rss_after_post', 'rss_after_related',
592
+ 'rss_no_results', 'rss_order', 'exclude', 'thumbnails_heading',
593
+ 'thumbnails_default', 'rss_thumbnails_heading', 'rss_thumbnails_default', 'display_code'
594
);
595
596
$data = array(
607
'myisam_posts' => $this->diagnostic_myisam_posts(),
608
'fulltext_indices' => $this->diagnostic_fulltext_indices(),
609
'hidden_metaboxes' => $this->diagnostic_hidden_metaboxes(),
610
+ 'post_thumbnails' => $this->diagnostic_post_thumbnails(),
611
+ 'happy' => $this->diagnostic_happy()
612
),
613
'stats' => array(
614
'counts' => array(),
626
'plugins' => array(
627
'active' => implode( '|', get_option( 'active_plugins', array() ) ),
628
'sitewide' => implode( '|', get_site_option( 'active_sitewide_plugins', array() ) )
629
+ ),
630
+ 'pools' => $settings['pools']
631
);
632
+ $data['yarpp']['settings']['auto_display_post_types'] = implode( '|', $settings['auto_display_post_types'] );
633
634
$changed = array();
635
foreach ( $check_changed as $key ) {
636
if ( $yarpp->default_options[$key] != $settings[$key] )
637
$changed[] = $key;
638
}
639
+ foreach ( array( 'before_related', 'rss_before_related' ) as $key ) {
640
+ if ( $settings[$key] != '<p>'.__('Related posts:','yarpp').'</p><ol>' &&
641
+ $settings[$key] != $yarpp->default_options[$key] )
642
+ $changed[] = $key;
643
+ }
644
$data['yarpp']['changed_settings'] = implode( '|', $changed );
645
646
if ( method_exists( $yarpp->cache, 'cache_status' ) )
750
}
751
$this->prep_query( $current_query->is_feed );
752
$related_query = $wp_query; // backwards compatibility
753
+ $related_count = $related_query->post_count;
754
755
// @todo: add these classes after the fact and include information about whether any results were given
756
$output = "<div class='";
758
$output .= "yarpp-related";
759
else
760
$output .= "yarpp-related-{$domain}";
761
+ if ( 1 > $related_count )
762
+ $output .= " yarpp-related-none";
763
$output .= "'>\n";
764
+
765
if ( 'metabox' == $domain ) {
766
include(YARPP_DIR . '/template-metabox.php');
767
} elseif ( !!$template && 'thumbnails' == $template ) {
790
wp_reset_postdata();
791
$pagenow = $current_pagenow; unset($current_pagenow);
792
793
+ if ( $related_count > 0 && $promote_yarpp && $domain != 'metabox' )
794
$output .= "<p>".sprintf(__("Related posts brought to you by <a href='%s'>Yet Another Related Posts Plugin</a>.",'yarpp'), 'http://yarpp.org')."</p>\n";
795
796
if ( $optin )
797
+ $output .= "<img src='http://yarpp.org/pixels/" . md5(get_bloginfo('url')) . "'/>\n";
798
799
$output .= "</div>\n";
800
1004
*/
1005
1006
function the_content($content) {
1007
+ // this filter doesn't handle feeds
1008
+ if ( is_feed() )
1009
+ return $content;
1010
+
1011
+ $auto_display_post_types = $this->get_option( 'auto_display_post_types' );
1012
+
1013
+ // if it's not an auto-display post type, return
1014
+ if ( !in_array( get_post_type(), $auto_display_post_types ) )
1015
+ return $content;
1016
+
1017
+ if ( !is_singular() && !(
1018
+ $this->get_option('auto_display_archive') &&
1019
+ ( is_archive() || is_home() )
1020
+ ) )
1021
+ return $content;
1022
1023
if ( $this->get_option('cross_relate') )
1024
+ $post_types = $this->get_post_types();
1025
else
1026
+ $post_types = array( get_post_type() );
1027
+
1028
+ $post_types = apply_filters( 'yarpp_map_post_types', $post_types );
1029
1030
+ return $content . $this->display_related(null, array(
1031
+ 'post_type' => $post_types,
1032
+ 'domain' => 'website'
1033
+ ), false);
1034
}
1035
1036
function the_content_feed($content) {
1081
return $result;
1082
}
1083
1084
+ // @since 4: optional data collection (default off)
1085
function optin_ping() {
1086
if ( get_transient( 'yarpp_optin' ) )
1087
return true;
js/options.js CHANGED
@@ -17,12 +17,8 @@ jQuery(function($) {
17
18
function excerpt() {
19
var metabox = $(this).closest('#yarpp_display_web, #yarpp_display_rss');
20
-
21
- if ( metabox.find('.use_template').val() == 'builtin' &&
22
- metabox.find('.show_excerpt input').attr('checked') )
23
- metabox.find('.excerpted').show();
24
- else
25
- metabox.find('.excerpted').hide();
26
}
27
$('.show_excerpt, .use_template, #yarpp-rss_display').click(excerpt);
28
@@ -30,7 +26,9 @@ jQuery(function($) {
30
function display() {
31
if ( !$('#yarpp_display_web .inside').is(':visible') )
32
return;
33
- if ( !loaded_demo_web ) {
34
loaded_demo_web = true;
35
var demo_web = $('#display_demo_web');
36
$.ajax({type:'POST',
@@ -52,9 +50,10 @@ jQuery(function($) {
52
function rss_display() {
53
if ( !$('#yarpp_display_rss .inside').is(':visible') )
54
return;
55
- if ($('#yarpp-rss_display').attr('checked')) {
56
$('.rss_displayed').show();
57
- if ( !loaded_demo_rss ) {
58
loaded_demo_rss = true;
59
var demo_rss = $('#display_demo_rss');
60
$.ajax({type:'POST',
@@ -138,10 +137,14 @@ jQuery(function($) {
138
$('#yarpp_pool .handlediv, #yarpp_pool-hide').click(load_disallows);
139
load_disallows();
140
141
- $('#yarpp-optin-learnmore').click(function() {
142
- $('#tab-link-optin a').click();
143
$('#contextual-help-link').click();
144
- });
145
146
$('.yarpp_help[data-help]').hover(function() {
147
var that = $(this),
@@ -168,8 +171,8 @@ jQuery(function($) {
168
options = {
169
content: help,
170
position: {
171
- edge: 'left',
172
- align: 'center',
173
of: that
174
},
175
document: {body: that}
@@ -237,4 +240,35 @@ jQuery(function($) {
237
}
238
$('#yarpp-optin-learnmore, a[aria-controls=tab-panel-optin]').bind('click focus', display_optin_data);
239
display_optin_data();
240
});
17
18
function excerpt() {
19
var metabox = $(this).closest('#yarpp_display_web, #yarpp_display_rss');
20
+ metabox.find('.excerpted').toggle( !!(metabox.find('.use_template').val() == 'builtin' &&
21
+ metabox.find('.show_excerpt input').attr('checked')) );
22
}
23
$('.show_excerpt, .use_template, #yarpp-rss_display').click(excerpt);
24
26
function display() {
27
if ( !$('#yarpp_display_web .inside').is(':visible') )
28
return;
29
+
30
+ $( '.yarpp_code_display' ).toggle( $('#yarpp_display_code').is(':checked') );
31
+ if ( $('#yarpp_display_web .yarpp_code_display').is(':visible') && !loaded_demo_web ) {
32
loaded_demo_web = true;
33
var demo_web = $('#display_demo_web');
34
$.ajax({type:'POST',
50
function rss_display() {
51
if ( !$('#yarpp_display_rss .inside').is(':visible') )
52
return;
53
+ if ( $('#yarpp-rss_display').is(':checked') ) {
54
$('.rss_displayed').show();
55
+ $( '.yarpp_code_display' ).toggle( $('#yarpp_display_code').is(':checked') );
56
+ if ( $('#yarpp_display_rss .yarpp_code_display').is(':visible') && !loaded_demo_rss ) {
57
loaded_demo_rss = true;
58
var demo_rss = $('#display_demo_rss');
59
$.ajax({type:'POST',
137
$('#yarpp_pool .handlediv, #yarpp_pool-hide').click(load_disallows);
138
load_disallows();
139
140
+ function show_help( section ) {
141
+ $('#tab-link-' + section + ' a').click();
142
$('#contextual-help-link').click();
143
+ }
144
+ $('#yarpp-optin-learnmore').click(function() { show_help('optin'); });
145
+ $('#yarpp-help-cpt').click(function() { show_help('dev'); });
146
+ if ( location.hash == '#help-optin' )
147
+ setTimeout( function() { show_help('optin'); } );
148
149
$('.yarpp_help[data-help]').hover(function() {
150
var that = $(this),
171
options = {
172
content: help,
173
position: {
174
+ edge: 'bottom',
175
+ // align: 'center',
176
of: that
177
},
178
document: {body: that}
240
}
241
$('#yarpp-optin-learnmore, a[aria-controls=tab-panel-optin]').bind('click focus', display_optin_data);
242
display_optin_data();
243
+
244
+ function sync_no_results() {
245
+ var value = $(this).find('input').attr('value');
246
+ if ( $(this).hasClass('sync_no_results') )
247
+ $('.sync_no_results input').attr('value', value);
248
+ if ( $(this).hasClass('sync_rss_no_results') )
249
+ $('.sync_rss_no_results input').attr('value', value);
250
+ }
251
+ $('.sync_no_results, .sync_rss_no_results').change(sync_no_results);
252
+
253
+ $('#yarpp_display_code').click(function() {
254
+ var args = {
255
+ action: 'yarpp_set_display_code',
256
+ '_ajax_nonce': $('#yarpp_set_display_code-nonce').val()
257
+ };
258
+ if ( $(this).is(':checked') )
259
+ args.checked = true;
260
+ $.ajax({type:'POST', url: ajaxurl, data: args});
261
+ display();
262
+ rss_display();
263
+ });
264
+
265
+ function auto_display_archive() {
266
+ var available = $('.yarpp_form_post_types').is(':has(input[type=checkbox]:checked)');
267
+ $('#yarpp-auto_display_archive')
268
+ .attr('disabled', !available);
269
+ if ( !available )
270
+ $('#yarpp-auto_display_archive').attr('checked', false);
271
+ }
272
+ $('.yarpp_form_post_types input[type=checkbox]').change(auto_display_archive);
273
+ auto_display_archive();
274
});
options-meta-boxes.php CHANGED
@@ -4,19 +4,19 @@ class YARPP_Meta_Box {
4
protected $template_text = '';
5
6
function __construct() {
7
- $this->template_text = __("This advanced option gives you full power to customize how your related posts are displayed. Templates (stored in your theme folder) are written in PHP.",'yarpp');
8
}
9
10
- function checkbox($option, $desc, $class = '') {
11
echo "<div class='yarpp_form_row yarpp_form_checkbox $class'><div scope='row'>";
12
echo "<input type='checkbox' name='$option' id='yarpp-$option' value='true'";
13
- checked(yarpp_get_option($option) == 1);
14
echo " /> <label for='yarpp-$option'>$desc</label></div></div>";
15
}
16
17
private function offer_copy_templates() {
18
global $yarpp;
19
- return ( !count($yarpp->admin->get_templates()) && $yarpp->admin->can_copy_templates() );
20
}
21
22
function template_checkbox( $rss = false, $class = '' ) {
@@ -27,12 +27,12 @@ class YARPP_Meta_Box {
27
$choice = false === $chosen_template ? 'builtin' :
28
( $chosen_template == 'thumbnails' ? 'thumbnails' : 'custom' );
29
30
- echo "<div class='yarpp_form_row $class'>";
31
32
echo "<div data-value='builtin' class='yarpp_template_button";
33
if ( 'builtin' == $choice )
34
echo ' active';
35
- echo "'><div class='image'></div><div class='label'>" . __('List', 'yarpp') . "</div></div>";
36
37
echo "<div data-value='thumbnails' class='yarpp_template_button";
38
if ( 'thumbnails' == $choice )
@@ -42,21 +42,21 @@ class YARPP_Meta_Box {
42
echo "'";
43
if ( !$yarpp->diagnostic_post_thumbnails() )
44
echo ' data-help="' . esc_attr( __( 'This option is disabled because your theme does not support post thumbnails.', 'yarpp' ) ) . '"';
45
- echo "><div class='image'></div><div class='label'>" . __('Thumbnails', 'yarpp') . "</div></div>";
46
47
echo "<div data-value='custom' class='yarpp_template_button";
48
if ( 'custom' == $choice )
49
echo ' active';
50
- if ( !count($yarpp->admin->get_templates()) )
51
echo ' disabled';
52
echo "'";
53
- if ( !count($yarpp->admin->get_templates()) ) {
54
- $help = __('This option is disabled because no YARPP templates were found in your theme.', 'yarpp');
55
if ( $this->offer_copy_templates() )
56
- $help .= ' ' . __("Would you like to copy some sample templates bundled with YARPP into your theme?", 'yarpp') . "<input type='button' class='button button-small yarpp_copy_templates_button' value='" . esc_attr(__('Copy Templates', 'yarpp')) . "'/>";
57
echo " data-help='" . esc_attr( $help ) . "'";
58
}
59
- echo "><div class='image'></div><div class='label'>" . __('Custom', 'yarpp') . "</div></div>";
60
61
echo "<input type='hidden' name='{$pre}use_template' id='yarpp-{$pre}use_template' class='use_template' value='{$choice}' />";
62
@@ -66,97 +66,97 @@ class YARPP_Meta_Box {
66
function template_file( $rss = false, $class = '' ) {
67
global $yarpp;
68
$pre = $rss ? 'rss_' : '';
69
- echo "<div class='yarpp_form_row $class'><div class='yarpp_form_label'>";
70
- _e("Template file:",'yarpp');
71
echo "</div><div><select name='{$pre}template_file' id='{$pre}template_file'>";
72
- $chosen_template = yarpp_get_option("{$pre}template");
73
- foreach ($yarpp->admin->get_templates() as $template) {
74
- echo "<option value='" . esc_attr($template['basename']) . "'" . selected($template['basename'], $chosen_template, false);
75
foreach ( $template as $key => $value )
76
- echo " data-{$key}='" . esc_attr($value) . "'";
77
- echo '>' . esc_html($template['name']) . '</option>';
78
}
79
- echo "</select><p class='template_file_wrap'><span id='{$pre}template_file'></span></p><p class='template_author_wrap'>" . __('Author:') . " <span id='{$pre}template_author'></span></p><p class='template_description_wrap'><span id='{$pre}template_description'></span></p></div></div>";
80
}
81
- function textbox($option, $desc, $size=2, $class='', $note = '') {
82
- $value = esc_attr(yarpp_get_option($option));
83
echo "<div class='yarpp_form_row yarpp_form_textbox $class'><div class='yarpp_form_label'>";
84
echo "$desc</div>
85
<div><input name='$option' type='text' id='$option' value='$value' size='$size' />";
86
- if ( !empty($note) )
87
echo " <em><small>{$note}</small></em>";
88
echo "</div></div>";
89
}
90
- function beforeafter($options, $desc, $size=10, $class='', $note = '') {
91
echo "<div class='yarpp_form_row yarpp_form_textbox $class'><div class='yarpp_form_label'>$desc</div><div>";
92
- $value = esc_attr(yarpp_get_option($options[0]));
93
echo "<input name='{$options[0]}' type='text' id='{$options[0]}' value='$value' size='$size' /> <span class='yarpp_divider'>/</span> ";
94
- $value = esc_attr(yarpp_get_option($options[1]));
95
echo "<input name='{$options[1]}' type='text' id='{$options[1]}' value='$value' size='$size' />";
96
- if ( !empty($note) )
97
echo " <em><small>{$note}</small></em>";
98
echo "</div></div>";
99
}
100
101
- function tax_weight($taxonomy) {
102
- $weight = (int) yarpp_get_option("weight[tax][{$taxonomy->name}]");
103
- $require = (int) yarpp_get_option("require_tax[{$taxonomy->name}]");
104
echo "<div class='yarpp_form_row yarpp_form_select'><div class='yarpp_form_label'>{$taxonomy->labels->name}:</div><div><select name='weight[tax][{$taxonomy->name}]'>";
105
- echo "<option value='no'". ((!$weight && !$require) ? ' selected="selected"': '' )." > " . __("do not consider",'yarpp') . "</option>";
106
- echo "<option value='consider'". (($weight == 1 && !$require) ? ' selected="selected"': '' )." >" . __("consider",'yarpp') . "</option>";
107
- echo "<option value='consider_extra'". (($weight > 1 && !$require) ? ' selected="selected"': '' )." >" . __("consider with extra weight",'yarpp') . "</option>";
108
- echo "<option value='require_one'". (($require == 1) ? ' selected="selected"': '' )." >" . sprintf(__("require at least one %s in common",'yarpp'),$taxonomy->labels->singular_name) . "</option>";
109
- echo "<option value='require_more'". (($require == 2) ? ' selected="selected"': '' )." >" . sprintf(__("require more than one %s in common",'yarpp'),$taxonomy->labels->singular_name) . "</option>";
110
echo "</select></div></div>";
111
}
112
113
- function weight($option, $desc) {
114
global $yarpp;
115
116
- $weight = (int) yarpp_get_option("weight[$option]");
117
118
// both require MyISAM fulltext indexing:
119
$myisam = !$yarpp->myisam ? ' readonly="readonly" disabled="disabled"' : '';
120
121
echo "<div class='yarpp_form_row yarpp_form_select'><div class='yarpp_form_label'>$desc</div><div>";
122
echo "<select name='weight[$option]'>";
123
- echo "<option $myisam value='no'". (!$weight ? ' selected="selected"': '' )." >".__("do not consider",'yarpp')."</option>";
124
- echo "<option $myisam value='consider'". (($weight == 1) ? ' selected="selected"': '' )." > ".__("consider",'yarpp')."</option>";
125
- echo "<option $myisam value='consider_extra'". (($weight > 1) ? ' selected="selected"': '' )." > ".__("consider with extra weight",'yarpp')."</option>";
126
echo "</select></div></div>";
127
}
128
129
function displayorder( $option, $class = '' ) {
130
echo "<div class='yarpp_form_row yarpp_form_select $class'><div class='yarpp_form_label'>";
131
- _e("Order results:",'yarpp');
132
echo "</div><div><select name='$option' id='<?php echo $option; ?>'>";
133
- $order = yarpp_get_option($option);
134
?>
135
- <option value="score DESC" <?php echo ($order == 'score DESC'?' selected="selected"':'')?>><?php _e("score (high relevance to low)",'yarpp');?></option>
136
- <option value="score ASC" <?php echo ($order == 'score ASC'?' selected="selected"':'')?>><?php _e("score (low relevance to high)",'yarpp');?></option>
137
- <option value="post_date DESC" <?php echo ($order == 'post_date DESC'?' selected="selected"':'')?>><?php _e("date (new to old)",'yarpp');?></option>
138
- <option value="post_date ASC" <?php echo ($order == 'post_date ASC'?' selected="selected"':'')?>><?php _e("date (old to new)",'yarpp');?></option>
139
- <option value="post_title ASC" <?php echo ($order == 'post_title ASC'?' selected="selected"':'')?>><?php _e("title (alphabetical)",'yarpp');?></option>
140
- <option value="post_title DESC" <?php echo ($order == 'post_title DESC'?' selected="selected"':'')?>><?php _e("title (reverse alphabetical)",'yarpp');?></option>
141
<?php
142
echo "</select></div></div>";
143
}
144
}
145
146
class YARPP_Meta_Box_Pool extends YARPP_Meta_Box {
147
- function exclude($taxonomy, $string) {
148
global $yarpp;
149
150
echo "<div class='yarpp_form_row yarpp_form_exclude'><div class='yarpp_form_label'>";
151
echo $string;
152
echo "</div><div class='yarpp_scroll_wrapper'><div class='exclude_terms' id='exclude_{$taxonomy}'>";
153
154
- $exclude_tt_ids = wp_parse_id_list(yarpp_get_option('exclude'));
155
$exclude_term_ids = $yarpp->admin->get_term_ids_from_tt_ids( $taxonomy, $exclude_tt_ids );
156
- if ( count($exclude_term_ids) ) {
157
- $terms = get_terms($taxonomy, array('include' => $exclude_term_ids));
158
- foreach ($terms as $term) {
159
- echo "<input type='checkbox' name='exclude[{$term->term_taxonomy_id}]' id='exclude_{$term->term_taxonomy_id}' value='true' checked='checked' /> <label for='exclude_{$term->term_taxonomy_id}'>" . esc_html($term->name) . "</label> ";
160
}
161
}
162
@@ -167,172 +167,217 @@ class YARPP_Meta_Box_Pool extends YARPP_Meta_Box {
167
global $yarpp;
168
169
echo "<p>";
170
- _e('"The Pool" refers to the pool of posts and pages that are candidates for display as related to the current entry.','yarpp');
171
echo "</p>\n";
172
?>
173
- <div class='yarpp_form_row'><div class='yarpp_form_label'><?php _e('Post types considered:', 'yarpp'); ?></div><div><?php echo implode(', ', $yarpp->get_post_types( 'label' )); ?> <a href='http://wordpress.org/extend/plugins/yet-another-related-posts-plugin/other_notes' class='yarpp_help'>&nbsp;</a></div></div>
174
175
<?php
176
- foreach ($yarpp->get_taxonomies() as $taxonomy) {
177
- $this->exclude($taxonomy->name, sprintf(__('Disallow by %s:','yarpp'), $taxonomy->labels->singular_name));
178
}
179
- $this->checkbox('show_pass_post',__("Show password protected posts?",'yarpp'));
180
181
- $recent = yarpp_get_option('recent');
182
if ( !!$recent ) {
183
- list($recent_number, $recent_units) = explode(' ', $recent);
184
} else {
185
$recent_number = 12;
186
$recent_units = 'month';
187
}
188
- $recent_number = "<input name=\"recent_number\" type=\"text\" id=\"recent_number\" value=\"".esc_attr($recent_number)."\" size=\"2\" />";
189
$recent_units = "<select name=\"recent_units\" id=\"recent_units\">
190
- <option value='day'". (('day'==$recent_units)?" selected='selected'":'').">".__('day(s)','yarpp')."</option>
191
- <option value='week'". (('week'==$recent_units)?" selected='selected'":'').">".__('week(s)','yarpp')."</option>
192
- <option value='month'". (('month'==$recent_units)?" selected='selected'":'').">".__('month(s)','yarpp')."</option>
193
</select>";
194
195
echo "<div class='yarpp_form_row yarpp_form_checkbox'><div><input type='checkbox' name='recent_only' value='true'";
196
- checked(!!$recent);
197
echo " /> ";
198
- echo str_replace('NUMBER',$recent_number,str_replace('UNITS',$recent_units,__("Show only posts from the past NUMBER UNITS",'yarpp')));
199
echo "</div></div>";
200
201
}
202
}
203
204
- add_meta_box('yarpp_pool', __('"The Pool"','yarpp'), array(new YARPP_Meta_Box_Pool, 'display'), 'settings_page_yarpp', 'normal', 'core');
205
206
class YARPP_Meta_Box_Relatedness extends YARPP_Meta_Box {
207
function display() {
208
global $yarpp;
209
?>
210
- <p><?php _e('YARPP limits the related posts list by (1) a maximum number and (2) a <em>match threshold</em>.','yarpp');?> <span class='yarpp_help' data-help="<?php echo esc_attr(__('The higher the match threshold, the more restrictive, and you get less related posts overall. The default match threshold is 5. If you want to find an appropriate match threshhold, take a look at some post\'s related posts display and their scores. You can see what kinds of related posts are being picked up and with what kind of match scores, and determine an appropriate threshold for your site.','yarpp'));?>">&nbsp;</span></p>
211
212
<?php
213
- $this->textbox( 'threshold', __('Match threshold:','yarpp') );
214
- $this->weight( 'title', __("Titles: ",'yarpp') );
215
- $this->weight( 'body', __("Bodies: ",'yarpp') );
216
217
- foreach ($yarpp->get_taxonomies() as $taxonomy) {
218
- $this->tax_weight($taxonomy);
219
}
220
221
- $this->checkbox('cross_relate',__("Display results from all post types",'yarpp')." <span class='yarpp_help' data-help='" . esc_attr(__("When \"display results from all post types\" is off, only posts will be displayed as related to a post, only pages will be displayed as related to a page, etc.", 'yarpp')) . "'>&nbsp;</span>");
222
- $this->checkbox('past_only',__("Show only previous posts?",'yarpp'));
223
}
224
}
225
226
- add_meta_box('yarpp_relatedness', __('"Relatedness" options','yarpp'), array(new YARPP_Meta_Box_Relatedness, 'display'), 'settings_page_yarpp', 'normal', 'core');
227
228
class YARPP_Meta_Box_Display_Web extends YARPP_Meta_Box {
229
function display() {
230
global $yarpp;
231
232
echo "<div style='overflow:auto'>";
233
- echo '<div class="yarpp_code_display"><strong>' . __("Website display code example",'yarpp') . '</strong><br /><small>' . __("(Update options to reload.)", 'yarpp') . "</small><br/><div id='display_demo_web'></div></div>";
234
- $this->checkbox('auto_display',__("Automatically display related posts?",'yarpp')." <span class='yarpp_help' data-help='" . esc_attr(__("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_pages()</code> and <code>related_entries()</code>) into your theme files.",'yarpp')) . "'>&nbsp;</span>");
235
236
- $this->textbox('limit',__('Maximum number of related posts:','yarpp'));
237
$this->template_checkbox( false );
238
echo "</div>";
239
240
- echo "<div class='postbox yarpp_subbox template_options_custom'>";
241
echo '<div class="yarpp_form_row"><div>' . $this->template_text . '</div></div>';
242
$this->template_file( false );
243
echo "</div>";
244
245
- echo "<div class='postbox yarpp_subbox template_options_thumbnails'>";
246
- $this->textbox('thumbnails_heading', __('Heading:','yarpp'), 40);
247
- $this->textbox('thumbnails_default', __('Default image (URL):','yarpp'), 40);
248
- $this->textbox('no_results', __('Default display if no results:','yarpp'), 40);
249
echo "</div>";
250
251
- echo "<div class='postbox yarpp_subbox template_options_builtin'>";
252
- $this->beforeafter(array('before_related', 'after_related'),__("Before / after related entries:",'yarpp'), 15, '', __("For example:",'yarpp') . ' &lt;ol&gt;&lt;/ol&gt;' . __(' or ','yarpp') . '&lt;div&gt;&lt;/div&gt;');
253
- $this->beforeafter(array('before_title', 'after_title'),__("Before / after each related entry:",'yarpp'),15, '', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
254
255
- $this->checkbox('show_excerpt', __("Show excerpt?",'yarpp'), 'show_excerpt');
256
- $this->textbox('excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'excerpted');
257
258
- $this->beforeafter(array('before_post', 'after_post'), __("Before / after (excerpt):",'yarpp'), 10, 'excerpted', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
259
260
- $this->textbox('no_results', __('Default display if no results:','yarpp'), 40);
261
echo "</div>";
262
263
- $this->displayorder('order');
264
265
- $this->checkbox('promote_yarpp',__("Help promote Yet Another Related Posts Plugin?",'yarpp')
266
- ." <span class='yarpp_help' data-help='" . esc_attr(sprintf(__("This option will add the code %s. Try turning it on, updating your options, and see the code in the code example to the right. These links and donations are greatly appreciated.", 'yarpp'),"<code>".htmlspecialchars(sprintf(__("Related posts brought to you by <a href='%s'>Yet Another Related Posts Plugin</a>.",'yarpp'), 'http://yarpp.org'))."</code>")) ."'>&nbsp;</span>");
267
}
268
}
269
270
- add_meta_box('yarpp_display_web', __('Display options <small>for your website</small>','yarpp'), array(new YARPP_Meta_Box_Display_Web, 'display'), 'settings_page_yarpp', 'normal', 'core');
271
272
class YARPP_Meta_Box_Display_Feed extends YARPP_Meta_Box {
273
function display() {
274
global $yarpp;
275
276
echo "<div style='overflow:auto'>";
277
- echo '<div class="rss_displayed yarpp_code_display"><b>' . __("RSS display code example",'yarpp') . '</b><br /><small>' . __("(Update options to reload.)",'yarpp') . "</small><br/><div id='display_demo_rss'></div></div>";
278
279
- $this->checkbox('rss_display',__("Display related posts in feeds?",'yarpp')." <span class='yarpp_help' data-help='" . esc_attr(__("This option displays related posts at the end of each item in your RSS and Atom feeds. No template changes are needed.",'yarpp')) . "'>&nbsp;</span>",'');
280
- $this->checkbox('rss_excerpt_display',__("Display related posts in the descriptions?",'yarpp')." <span class='yarpp_help' data-help='" . esc_attr(__("This option displays the related posts in the RSS description fields, not just the content. If your feeds are set up to only display excerpts, however, only the description field is used, so this option is required for any display at all.",'yarpp')) . "'>&nbsp;</span>", 'rss_displayed');
281
282
- $this->textbox('rss_limit',__('Maximum number of related posts:','yarpp'), 2, 'rss_displayed');
283
$this->template_checkbox( true, 'rss_displayed' );
284
echo "</div>";
285
286
- echo "<div class='postbox yarpp_subbox template_options_custom rss_displayed'>";
287
echo '<div class="yarpp_form_row"><div>' . $this->template_text . '</div></div>';
288
$this->template_file( true );
289
echo "</div>";
290
291
- echo "<div class='postbox yarpp_subbox template_options_thumbnails'>";
292
- $this->textbox('rss_thumbnails_heading', __('Heading:','yarpp'), 40);
293
- $this->textbox('rss_thumbnails_default', __('Default image (URL):','yarpp'), 40);
294
- $this->textbox('rss_no_results', __('Default display if no results:','yarpp'), 40);
295
echo "</div>";
296
297
- echo "<div class='postbox yarpp_subbox template_options_builtin rss_displayed'>";
298
- $this->beforeafter(array('rss_before_related', 'rss_after_related'),__("Before / after related entries:",'yarpp'), 15, '', __("For example:",'yarpp') . ' &lt;ol&gt;&lt;/ol&gt;' . __(' or ','yarpp') . '&lt;div&gt;&lt;/div&gt;');
299
- $this->beforeafter(array('rss_before_title', 'rss_after_title'),__("Before / after each related entry:",'yarpp'), 15, '', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
300
301
- $this->checkbox('rss_show_excerpt', __("Show excerpt?",'yarpp'), 'show_excerpt');
302
- $this->textbox('rss_excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'excerpted');
303
304
- $this->beforeafter(array('rss_before_post', 'rss_after_post'),__("Before / after (excerpt):",'yarpp'), 10, 'excerpted', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
305
306
- $this->textbox('rss_no_results', __('Default display if no results:','yarpp'), 40);
307
echo "</div>";
308
309
- $this->displayorder('rss_order', 'rss_displayed');
310
311
- $this->checkbox('rss_promote_yarpp', __("Help promote Yet Another Related Posts Plugin?",'yarpp') . " <span class='yarpp_help' data-help='" . esc_attr(sprintf(__("This option will add the code %s. Try turning it on, updating your options, and see the code in the code example to the right. These links and donations are greatly appreciated.", 'yarpp'),"<code>" . htmlspecialchars(sprintf(__("Related posts brought to you by <a href='%s'>Yet Another Related Posts Plugin</a>.",'yarpp'), 'http://yarpp.org'))."</code>")) . "'>&nbsp;</span>", 'rss_displayed');
312
}
313
}
314
315
- add_meta_box('yarpp_display_rss', __('Display options <small>for RSS</small>','yarpp'), array(new YARPP_Meta_Box_Display_Feed, 'display'), 'settings_page_yarpp', 'normal', 'core');
316
317
class YARPP_Meta_Box_Contact extends YARPP_Meta_Box {
318
function display() {
319
global $yarpp;
320
- $pluginurl = plugin_dir_url(__FILE__);
321
?>
322
<ul class='yarpp_contacts'>
323
- <li><a href="http://wordpress.org/support/plugin/yet-another-related-posts-plugin" target="_blank"><span class='icon icon-wordpress'></span> <?php _e('YARPP Forum', 'yarpp'); ?></a></li>
324
- <li><a href="http://twitter.com/yarpp" target="_blank"><span class='icon icon-twitter'></span> <?php _e('YARPP on Twitter', 'yarpp'); ?></a></li>
325
- <li><a href="http://yarpp.org" target="_blank"><span class='icon icon-plugin'></span> <?php _e('YARPP on the Web', 'yarpp'); ?></a></li>
326
- <li><a href="http://wordpress.org/support/view/plugin-reviews/yet-another-related-posts-plugin" target="_blank"><span class='icon icon-star <?php if ($yarpp->is_happy()) echo 'spin'; ?>'></span> <?php _e('Review YARPP on WordPress.org', 'yarpp'); ?></a></li>
327
- <li><a href='http://tinyurl.com/donatetomitcho' target='_new'><span class='icon icon-paypal'></span> <img src="https://www.paypal.com/<?php echo $this->paypal_lang(); ?>i/btn/btn_donate_SM.gif" name="submit" alt="<?php _e('Donate to mitcho (Michael Yoshitaka Erlewine) for this plugin via PayPal');?>" title="<?php _e('Donate to mitcho (Michael Yoshitaka Erlewine) for this plugin via PayPal','yarpp');?>"/></a></li>
328
</ul>
329
<?php
330
}
331
332
function paypal_lang() {
333
- if ( !defined('WPLANG') )
334
return 'en_US/';
335
- switch ( substr(WPLANG, 0, 2) ) {
336
case 'fr':
337
return 'fr_FR/';
338
case 'de':
@@ -348,7 +393,7 @@ class YARPP_Meta_Box_Contact extends YARPP_Meta_Box {
348
case 'pl':
349
return 'pl_PL/';
350
case 'zh':
351
- if (preg_match("/^zh_(HK|TW)/i",WPLANG))
352
return 'zh_HK/';
353
// actually zh_CN, but interpret as default zh:
354
return 'zh_XC/';
@@ -357,28 +402,35 @@ class YARPP_Meta_Box_Contact extends YARPP_Meta_Box {
357
}
358
}
359
}
360
-
361
- add_meta_box('yarpp_display_optin', __('Help Improve YARPP','yarpp'), array(new YARPP_Meta_Box_Optin, 'display'), 'settings_page_yarpp', 'side', 'core');
362
363
class YARPP_Meta_Box_Optin extends YARPP_Meta_Box {
364
function display() {
365
global $yarpp;
366
367
- if ( $yarpp->get_option('optin') )
368
$yarpp->optin_ping();
369
370
// TODO: fix this text and i18nize it
371
echo "<input type='checkbox' id='yarpp-optin' name='optin' value='true'";
372
- checked(yarpp_get_option('optin') == 1);
373
echo " /> ";
374
375
- echo '<label for="yarpp-optin">' . __('Send settings and usage data back to YARPP', 'yarpp') . '</label>';
376
377
echo '<p>This is entirely optional, but will help improve future versions of YARPP. <input type="button" value="Learn More" id="yarpp-optin-learnmore" class="button button-small" style="float:right"/></p>';
378
}
379
}
380
381
- add_meta_box('yarpp_display_contact', __('Contact YARPP','yarpp'), array(new YARPP_Meta_Box_Contact, 'display'), 'settings_page_yarpp', 'side', 'core');
382
383
// since 3.3: hook for registering new YARPP meta boxes
384
do_action( 'add_meta_boxes_settings_page_yarpp' );
4
protected $template_text = '';
5
6
function __construct() {
7
+ $this->template_text = __( "This advanced option gives you full power to customize how your related posts are displayed. Templates (stored in your theme folder) are written in PHP.", 'yarpp' );
8
}
9
10
+ function checkbox( $option, $desc, $class = '' ) {
11
echo "<div class='yarpp_form_row yarpp_form_checkbox $class'><div scope='row'>";
12
echo "<input type='checkbox' name='$option' id='yarpp-$option' value='true'";
13
+ checked( yarpp_get_option( $option ) == 1 );
14
echo " /> <label for='yarpp-$option'>$desc</label></div></div>";
15
}
16
17
private function offer_copy_templates() {
18
global $yarpp;
19
+ return ( !count( $yarpp->admin->get_templates() ) && $yarpp->admin->can_copy_templates() );
20
}
21
22
function template_checkbox( $rss = false, $class = '' ) {
27
$choice = false === $chosen_template ? 'builtin' :
28
( $chosen_template == 'thumbnails' ? 'thumbnails' : 'custom' );
29
30
+ echo "<div class='yarpp_form_row yarpp_form_template_buttons $class'>";
31
32
echo "<div data-value='builtin' class='yarpp_template_button";
33
if ( 'builtin' == $choice )
34
echo ' active';
35
+ echo "'><div class='image'></div><div class='label'>" . __( 'List', 'yarpp' ) . "</div></div>";
36
37
echo "<div data-value='thumbnails' class='yarpp_template_button";
38
if ( 'thumbnails' == $choice )
42
echo "'";
43
if ( !$yarpp->diagnostic_post_thumbnails() )
44
echo ' data-help="' . esc_attr( __( 'This option is disabled because your theme does not support post thumbnails.', 'yarpp' ) ) . '"';
45
+ echo "><div class='image'></div><div class='label'>" . __( 'Thumbnails', 'yarpp' ) . "</div></div>";
46
47
echo "<div data-value='custom' class='yarpp_template_button";
48
if ( 'custom' == $choice )
49
echo ' active';
50
+ if ( !count( $yarpp->admin->get_templates() ) )
51
echo ' disabled';
52
echo "'";
53
+ if ( !count( $yarpp->admin->get_templates() ) ) {
54
+ $help = __( 'This option is disabled because no YARPP templates were found in your theme.', 'yarpp' );
55
if ( $this->offer_copy_templates() )
56
+ $help .= ' ' . __( "Would you like to copy some sample templates bundled with YARPP into your theme?", 'yarpp' ) . "<input type='button' class='button button-small yarpp_copy_templates_button' value='" . esc_attr( __( 'Copy Templates', 'yarpp' ) ) . "'/>";
57
echo " data-help='" . esc_attr( $help ) . "'";
58
}
59
+ echo "><div class='image'></div><div class='label'>" . __( 'Custom', 'yarpp' ) . "</div></div>";
60
61
echo "<input type='hidden' name='{$pre}use_template' id='yarpp-{$pre}use_template' class='use_template' value='{$choice}' />";
62
66
function template_file( $rss = false, $class = '' ) {
67
global $yarpp;
68
$pre = $rss ? 'rss_' : '';
69
+ echo "<div class='yarpp_form_row yarpp_form_template_file $class'><div class='yarpp_form_label'>";
70
+ _e( "Template file:", 'yarpp' );
71
echo "</div><div><select name='{$pre}template_file' id='{$pre}template_file'>";
72
+ $chosen_template = yarpp_get_option( "{$pre}template" );
73
+ foreach ( $yarpp->admin->get_templates() as $template ) {
74
+ echo "<option value='" . esc_attr( $template['basename'] ) . "'" . selected( $template['basename'], $chosen_template, false );
75
foreach ( $template as $key => $value )
76
+ echo " data-{$key}='" . esc_attr( $value ) . "'";
77
+ echo '>' . esc_html( $template['name'] ) . '</option>';
78
}
79
+ echo "</select><p class='template_file_wrap'><span id='{$pre}template_file'></span></p><p class='template_author_wrap'>" . __( 'Author:' ) . " <span id='{$pre}template_author'></span></p><p class='template_description_wrap'><span id='{$pre}template_description'></span></p></div></div>";
80
}
81
+ function textbox( $option, $desc, $size=2, $class='', $note = '' ) {
82
+ $value = esc_attr( yarpp_get_option( $option ) );
83
echo "<div class='yarpp_form_row yarpp_form_textbox $class'><div class='yarpp_form_label'>";
84
echo "$desc</div>
85
<div><input name='$option' type='text' id='$option' value='$value' size='$size' />";
86
+ if ( !empty( $note ) )
87
echo " <em><small>{$note}</small></em>";
88
echo "</div></div>";
89
}
90
+ function beforeafter( $options, $desc, $size=10, $class='', $note = '' ) {
91
echo "<div class='yarpp_form_row yarpp_form_textbox $class'><div class='yarpp_form_label'>$desc</div><div>";
92
+ $value = esc_attr( yarpp_get_option( $options[0] ) );
93
echo "<input name='{$options[0]}' type='text' id='{$options[0]}' value='$value' size='$size' /> <span class='yarpp_divider'>/</span> ";
94
+ $value = esc_attr( yarpp_get_option( $options[1] ) );
95
echo "<input name='{$options[1]}' type='text' id='{$options[1]}' value='$value' size='$size' />";
96
+ if ( !empty( $note ) )
97
echo " <em><small>{$note}</small></em>";
98
echo "</div></div>";
99
}
100
101
+ function tax_weight( $taxonomy ) {
102
+ $weight = (int) yarpp_get_option( "weight[tax][{$taxonomy->name}]" );
103
+ $require = (int) yarpp_get_option( "require_tax[{$taxonomy->name}]" );
104
echo "<div class='yarpp_form_row yarpp_form_select'><div class='yarpp_form_label'>{$taxonomy->labels->name}:</div><div><select name='weight[tax][{$taxonomy->name}]'>";
105
+ echo "<option value='no'". ( ( !$weight && !$require ) ? ' selected="selected"': '' )." > " . __( "do not consider", 'yarpp' ) . "</option>";
106
+ echo "<option value='consider'". ( ( $weight == 1 && !$require ) ? ' selected="selected"': '' )." >" . __( "consider", 'yarpp' ) . "</option>";
107
+ echo "<option value='consider_extra'". ( ( $weight > 1 && !$require ) ? ' selected="selected"': '' )." >" . __( "consider with extra weight", 'yarpp' ) . "</option>";
108
+ echo "<option value='require_one'". ( ( $require == 1 ) ? ' selected="selected"': '' )." >" . sprintf( __( "require at least one %s in common", 'yarpp' ), $taxonomy->labels->singular_name ) . "</option>";
109
+ echo "<option value='require_more'". ( ( $require == 2 ) ? ' selected="selected"': '' )." >" . sprintf( __( "require more than one %s in common", 'yarpp' ), $taxonomy->labels->singular_name ) . "</option>";
110
echo "</select></div></div>";
111
}
112
113
+ function weight( $option, $desc ) {
114
global $yarpp;
115
116
+ $weight = (int) yarpp_get_option( "weight[$option]" );
117
118
// both require MyISAM fulltext indexing:
119
$myisam = !$yarpp->myisam ? ' readonly="readonly" disabled="disabled"' : '';
120
121
echo "<div class='yarpp_form_row yarpp_form_select'><div class='yarpp_form_label'>$desc</div><div>";
122
echo "<select name='weight[$option]'>";
123
+ echo "<option $myisam value='no'". ( !$weight ? ' selected="selected"': '' )." >".__( "do not consider", 'yarpp' )."</option>";
124
+ echo "<option $myisam value='consider'". ( ( $weight == 1 ) ? ' selected="selected"': '' )." > ".__( "consider", 'yarpp' )."</option>";
125
+ echo "<option $myisam value='consider_extra'". ( ( $weight > 1 ) ? ' selected="selected"': '' )." > ".__( "consider with extra weight", 'yarpp' )."</option>";
126
echo "</select></div></div>";
127
}
128
129
function displayorder( $option, $class = '' ) {
130
echo "<div class='yarpp_form_row yarpp_form_select $class'><div class='yarpp_form_label'>";
131
+ _e( "Order results:", 'yarpp' );
132
echo "</div><div><select name='$option' id='<?php echo $option; ?>'>";
133
+ $order = yarpp_get_option( $option );
134
?>
135
+ <option value="score DESC" <?php echo ( $order == 'score DESC'?' selected="selected"':'' )?>><?php _e( "score (high relevance to low)", 'yarpp' ); ?></option>
136
+ <option value="score ASC" <?php echo ( $order == 'score ASC'?' selected="selected"':'' )?>><?php _e( "score (low relevance to high)", 'yarpp' ); ?></option>
137
+ <option value="post_date DESC" <?php echo ( $order == 'post_date DESC'?' selected="selected"':'' )?>><?php _e( "date (new to old)", 'yarpp' ); ?></option>
138
+ <option value="post_date ASC" <?php echo ( $order == 'post_date ASC'?' selected="selected"':'' )?>><?php _e( "date (old to new)", 'yarpp' ); ?></option>
139
+ <option value="post_title ASC" <?php echo ( $order == 'post_title ASC'?' selected="selected"':'' )?>><?php _e( "title (alphabetical)", 'yarpp' ); ?></option>
140
+ <option value="post_title DESC" <?php echo ( $order == 'post_title DESC'?' selected="selected"':'' )?>><?php _e( "title (reverse alphabetical)", 'yarpp' ); ?></option>
141
<?php
142
echo "</select></div></div>";
143
}
144
}
145
146
class YARPP_Meta_Box_Pool extends YARPP_Meta_Box {
147
+ function exclude( $taxonomy, $string ) {
148
global $yarpp;
149
150
echo "<div class='yarpp_form_row yarpp_form_exclude'><div class='yarpp_form_label'>";
151
echo $string;
152
echo "</div><div class='yarpp_scroll_wrapper'><div class='exclude_terms' id='exclude_{$taxonomy}'>";
153
154
+ $exclude_tt_ids = wp_parse_id_list( yarpp_get_option( 'exclude' ) );
155
$exclude_term_ids = $yarpp->admin->get_term_ids_from_tt_ids( $taxonomy, $exclude_tt_ids );
156
+ if ( count( $exclude_term_ids ) ) {
157
+ $terms = get_terms( $taxonomy, array( 'include' => $exclude_term_ids ) );
158
+ foreach ( $terms as $term ) {
159
+ echo "<input type='checkbox' name='exclude[{$term->term_taxonomy_id}]' id='exclude_{$term->term_taxonomy_id}' value='true' checked='checked' /> <label for='exclude_{$term->term_taxonomy_id}'>" . esc_html( $term->name ) . "</label> ";
160
}
161
}
162
167
global $yarpp;
168
169
echo "<p>";
170
+ _e( '"The Pool" refers to the pool of posts and pages that are candidates for display as related to the current entry.', 'yarpp' );
171
echo "</p>\n";
172
?>
173
+ <div class='yarpp_form_row'><div class='yarpp_form_label'><?php _e( 'Post types considered:', 'yarpp' ); ?></div><div><?php echo implode( ', ', $yarpp->get_post_types( 'label' ) ); ?> <a href='#help-dev' id='yarpp-help-cpt' class='yarpp_help'>&nbsp;</a></div></div>
174
175
<?php
176
+ foreach ( $yarpp->get_taxonomies() as $taxonomy ) {
177
+ $this->exclude( $taxonomy->name, sprintf( __( 'Disallow by %s:', 'yarpp' ), $taxonomy->labels->singular_name ) );
178
}
179
+ $this->checkbox( 'show_pass_post', __( "Show password protected posts?", 'yarpp' ) );
180
181
+ $recent = yarpp_get_option( 'recent' );
182
if ( !!$recent ) {
183
+ list( $recent_number, $recent_units ) = explode( ' ', $recent );
184
} else {
185
$recent_number = 12;
186
$recent_units = 'month';
187
}
188
+ $recent_number = "<input name=\"recent_number\" type=\"text\" id=\"recent_number\" value=\"".esc_attr( $recent_number )."\" size=\"2\" />";
189
$recent_units = "<select name=\"recent_units\" id=\"recent_units\">
190
+ <option value='day'" . ( ( 'day'==$recent_units) ? " selected='selected'" : '' ) . ">" . __( 'day(s)', 'yarpp' )."</option>
191
+ <option value='week'" . ( ( 'week'==$recent_units ) ? " selected='selected'" : '' ) . ">" . __( 'week(s)', 'yarpp' )."</option>
192
+ <option value='month'" . ( ( 'month'==$recent_units ) ? " selected='selected'" : '' ) . ">" . __( 'month(s)', 'yarpp' ) . "</option>
193
</select>";
194
195
echo "<div class='yarpp_form_row yarpp_form_checkbox'><div><input type='checkbox' name='recent_only' value='true'";
196
+ checked( !!$recent );
197
echo " /> ";
198
+ echo str_replace( 'NUMBER', $recent_number, str_replace( 'UNITS', $recent_units, __( "Show only posts from the past NUMBER UNITS", 'yarpp' ) ) );
199
echo "</div></div>";
200
201
}
202
}
203
204
+ add_meta_box( 'yarpp_pool', __( '"The Pool"', 'yarpp' ), array( new YARPP_Meta_Box_Pool, 'display' ), 'settings_page_yarpp', 'normal', 'core' );
205
206
class YARPP_Meta_Box_Relatedness extends YARPP_Meta_Box {
207
function display() {
208
global $yarpp;
209
?>
210
+ <p><?php _e( 'YARPP limits the related posts list by (1) a maximum number and (2) a <em>match threshold</em>.', 'yarpp' ); ?> <span class='yarpp_help' data-help="<?php echo esc_attr( __( 'The higher the match threshold, the more restrictive, and you get less related posts overall. The default match threshold is 5. If you want to find an appropriate match threshhold, take a look at some post\'s related posts display and their scores. You can see what kinds of related posts are being picked up and with what kind of match scores, and determine an appropriate threshold for your site.', 'yarpp' ) ); ?>">&nbsp;</span></p>
211
212
<?php
213
+ $this->textbox( 'threshold', __( 'Match threshold:', 'yarpp' ) );
214
+ $this->weight( 'title', __( "Titles: ", 'yarpp' ) );
215
+ $this->weight( 'body', __( "Bodies: ", 'yarpp' ) );
216
217
+ foreach ( $yarpp->get_taxonomies() as $taxonomy ) {
218
+ $this->tax_weight( $taxonomy );
219
}
220
221
+ $this->checkbox( 'cross_relate', __( "Display results from all post types", 'yarpp' )." <span class='yarpp_help' data-help='" . esc_attr( __( "When \"display results from all post types\" is off, only posts will be displayed as related to a post, only pages will be displayed as related to a page, etc.", 'yarpp' ) ) . "'>&nbsp;</span>" );
222
+ $this->checkbox( 'past_only', __( "Show only previous posts?", 'yarpp' ) );
223
}
224
}
225
226
+ add_meta_box( 'yarpp_relatedness', __( '"Relatedness" options', 'yarpp' ), array( new YARPP_Meta_Box_Relatedness, 'display' ), 'settings_page_yarpp', 'normal', 'core' );
227
228
class YARPP_Meta_Box_Display_Web extends YARPP_Meta_Box {
229
function display() {
230
global $yarpp;
231
232
echo "<div style='overflow:auto'>";
233
+ echo '<div class="yarpp_code_display"';
234
+ if ( !$yarpp->get_option('code_display') )
235
+ echo ' style="display: none;"';
236
+ echo '><strong>' . __( "Website display code example", 'yarpp' ) . '</strong><br /><small>' . __( "(Update options to reload.)", 'yarpp' ) . "</small><br/><div id='display_demo_web'></div></div>";
237
+
238
+ echo "<div class='yarpp_form_row yarpp_form_post_types'><div class='yarpp_form_label'>";
239
+ _e( "Automatically display:", 'yarpp' );
240
+ echo " <span class='yarpp_help' data-help='" . esc_attr( __( "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_pages()</code> and <code>related_entries()</code>) into your theme files.", 'yarpp' ) ) . "'>&nbsp;</span>";
241
+ echo "</div><div>";
242
+ $post_types = yarpp_get_option( 'auto_display_post_types' );
243
+ foreach ( $yarpp->get_post_types( 'objects' ) as $post_type ) {
244
+ echo "<label for='yarpp_post_type_{$post_type->name}'><input id='yarpp_post_type_{$post_type->name}' name='auto_display_post_types[{$post_type->name}]' type='checkbox' ";
245
+ checked( in_array( $post_type->name, $post_types ) );
246
+ echo "/> {$post_type->labels->name}</label> ";
247
+ }
248
+ echo "</div></div>";
249
+
250
+ $this->checkbox( 'auto_display_archive', __( "Also display in archives", 'yarpp' ) );
251
252
+ $this->textbox( 'limit', __( 'Maximum number of related posts:', 'yarpp' ) );
253
$this->template_checkbox( false );
254
echo "</div>";
255
256
+ $chosen_template = yarpp_get_option( "template" );
257
+ $choice = false === $chosen_template ? 'builtin' :
258
+ ( $chosen_template == 'thumbnails' ? 'thumbnails' : 'custom' );
259
+
260
+ echo "<div class='postbox yarpp_subbox template_options_custom'";
261
+ if ( $choice != 'custom' )
262
+ echo ' style="display: none;"';
263
+ echo ">";
264
echo '<div class="yarpp_form_row"><div>' . $this->template_text . '</div></div>';
265
$this->template_file( false );
266
echo "</div>";
267
268
+ echo "<div class='postbox yarpp_subbox template_options_thumbnails'";
269
+ if ( $choice != 'thumbnails' )
270
+ echo ' style="display: none;"';
271
+ echo ">";
272
+ $this->textbox( 'thumbnails_heading', __( 'Heading:', 'yarpp' ), 40 );
273
+ $this->textbox( 'thumbnails_default', __( 'Default image (URL):', 'yarpp' ), 40 );
274
+ $this->textbox( 'no_results', __( 'Default display if no results:', 'yarpp' ), 40, 'sync_no_results' );
275
echo "</div>";
276
277
+ echo "<div class='postbox yarpp_subbox template_options_builtin'";
278
+ if ( $choice != 'builtin' )
279
+ echo ' style="display: none;"';
280
+ echo ">";
281
+ $this->beforeafter( array( 'before_related', 'after_related' ), __( "Before / after related entries:", 'yarpp' ), 15, '', __( "For example:", 'yarpp' ) . ' &lt;ol&gt;&lt;/ol&gt;' . __( ' or ', 'yarpp' ) . '&lt;div&gt;&lt;/div&gt;' );
282
+ $this->beforeafter( array( 'before_title', 'after_title' ), __( "Before / after each related entry:", 'yarpp' ), 15, '', __( "For example:", 'yarpp' ) . ' &lt;li&gt;&lt;/li&gt;' . __( ' or ', 'yarpp' ) . '&lt;dl&gt;&lt;/dl&gt;' );
283
284
+ $this->checkbox( 'show_excerpt', __( "Show excerpt?", 'yarpp' ), 'show_excerpt' );
285
+ $this->textbox( 'excerpt_length', __( 'Excerpt length (No. of words):', 'yarpp' ), 10, 'excerpted' );
286
287
+ $this->beforeafter( array( 'before_post', 'after_post' ), __( "Before / after (excerpt):", 'yarpp' ), 10, 'excerpted', __( "For example:", 'yarpp' ) . ' &lt;li&gt;&lt;/li&gt;' . __( ' or ', 'yarpp' ) . '&lt;dl&gt;&lt;/dl&gt;' );
288
289
+ $this->textbox( 'no_results', __( 'Default display if no results:', 'yarpp' ), 40, 'sync_no_results' );
290
echo "</div>";
291
292
+ $this->displayorder( 'order' );
293
294
+ $this->checkbox( 'promote_yarpp', __( "Help promote Yet Another Related Posts Plugin?", 'yarpp' )
295
+ ." <span class='yarpp_help' data-help='" . esc_attr( sprintf( __( "This option will add the code %s. Try turning it on, updating your options, and see the code in the code example to the right. These links and donations are greatly appreciated.", 'yarpp' ), "<code>" . htmlspecialchars( sprintf( __( "Related posts brought to you by <a href='%s'>Yet Another Related Posts Plugin</a>.", 'yarpp' ), 'http://yarpp.org' ) ) . "</code>" ) ) ."'>&nbsp;</span>" );
296
}
297
}
298
299
+ add_meta_box( 'yarpp_display_web', __( 'Display options <small>for your website</small>', 'yarpp' ), array( new YARPP_Meta_Box_Display_Web, 'display' ), 'settings_page_yarpp', 'normal', 'core' );
300
301
class YARPP_Meta_Box_Display_Feed extends YARPP_Meta_Box {
302
function display() {
303
global $yarpp;
304
305
echo "<div style='overflow:auto'>";
306
+ echo '<div class="rss_displayed yarpp_code_display"';
307
+ if ( !$yarpp->get_option('code_display') )
308
+ echo ' style="display: none;"';
309
+ echo '><b>' . __( "RSS display code example", 'yarpp' ) . '</b><br /><small>' . __( "(Update options to reload.)", 'yarpp' ) . "</small><br/><div id='display_demo_rss'></div></div>";
310
311
+ $this->checkbox( 'rss_display', __( "Display related posts in feeds?", 'yarpp' )." <span class='yarpp_help' data-help='" . esc_attr( __( "This option displays related posts at the end of each item in your RSS and Atom feeds. No template changes are needed.", 'yarpp' ) ) . "'>&nbsp;</span>", '' );
312
+ $this->checkbox( 'rss_excerpt_display', __( "Display related posts in the descriptions?", 'yarpp' )." <span class='yarpp_help' data-help='" . esc_attr( __( "This option displays the related posts in the RSS description fields, not just the content. If your feeds are set up to only display excerpts, however, only the description field is used, so this option is required for any display at all.", 'yarpp' ) ) . "'>&nbsp;</span>", 'rss_displayed' );
313
314
+ $this->textbox( 'rss_limit', __( 'Maximum number of related posts:', 'yarpp' ), 2, 'rss_displayed' );
315
$this->template_checkbox( true, 'rss_displayed' );
316
echo "</div>";
317
318
+ $chosen_template = yarpp_get_option( "rss_template" );
319
+ $choice = false === $chosen_template ? 'builtin' :
320
+ ( $chosen_template == 'thumbnails' ? 'thumbnails' : 'custom' );
321
+
322
+ echo "<div class='postbox yarpp_subbox template_options_custom rss_displayed'";
323
+ if ( $choice != 'custom' )
324
+ echo ' style="display: none;"';
325
+ echo ">";
326
echo '<div class="yarpp_form_row"><div>' . $this->template_text . '</div></div>';
327
$this->template_file( true );
328
echo "</div>";
329
330
+ echo "<div class='postbox yarpp_subbox template_options_thumbnails'";
331
+ if ( $choice != 'thumbnails' )
332
+ echo ' style="display: none;"';
333
+ echo ">";
334
+ $this->textbox( 'rss_thumbnails_heading', __( 'Heading:', 'yarpp' ), 40 );
335
+ $this->textbox( 'rss_thumbnails_default', __( 'Default image (URL):', 'yarpp' ), 40 );
336
+ $this->textbox( 'rss_no_results', __( 'Default display if no results:', 'yarpp' ), 40, 'sync_rss_no_results' );
337
echo "</div>";
338
339
+ echo "<div class='postbox yarpp_subbox template_options_builtin rss_displayed'";
340
+ if ( $choice != 'builtin' )
341
+ echo ' style="display: none;"';
342
+ echo ">";
343
+ $this->beforeafter( array( 'rss_before_related', 'rss_after_related' ), __( "Before / after related entries:", 'yarpp' ), 15, '', __( "For example:", 'yarpp' ) . ' &lt;ol&gt;&lt;/ol&gt;' . __( ' or ', 'yarpp' ) . '&lt;div&gt;&lt;/div&gt;' );
344
+ $this->beforeafter( array( 'rss_before_title', 'rss_after_title' ), __( "Before / after each related entry:", 'yarpp' ), 15, '', __( "For example:", 'yarpp' ) . ' &lt;li&gt;&lt;/li&gt;' . __( ' or ', 'yarpp' ) . '&lt;dl&gt;&lt;/dl&gt;' );
345
346
+ $this->checkbox( 'rss_show_excerpt', __( "Show excerpt?", 'yarpp' ), 'show_excerpt' );
347
+ $this->textbox( 'rss_excerpt_length', __( 'Excerpt length (No. of words):', 'yarpp' ), 10, 'excerpted' );
348
349
+ $this->beforeafter( array( 'rss_before_post', 'rss_after_post' ), __( "Before / after (excerpt):", 'yarpp' ), 10, 'excerpted', __( "For example:", 'yarpp' ) . ' &lt;li&gt;&lt;/li&gt;' . __( ' or ', 'yarpp' ) . '&lt;dl&gt;&lt;/dl&gt;' );
350
351
+ $this->textbox( 'rss_no_results', __( 'Default display if no results:', 'yarpp' ), 40, 'sync_rss_no_results' );
352
echo "</div>";
353
354
+ $this->displayorder( 'rss_order', 'rss_displayed' );
355
356
+ $this->checkbox( 'rss_promote_yarpp', __( "Help promote Yet Another Related Posts Plugin?", 'yarpp' ) . " <span class='yarpp_help' data-help='" . esc_attr( sprintf( __( "This option will add the code %s. Try turning it on, updating your options, and see the code in the code example to the right. These links and donations are greatly appreciated.", 'yarpp' ), "<code>" . htmlspecialchars( sprintf( __( "Related posts brought to you by <a href='%s'>Yet Another Related Posts Plugin</a>.", 'yarpp' ), 'http://yarpp.org' ) )."</code>" ) ) . "'>&nbsp;</span>", 'rss_displayed' );
357
}
358
}
359
360
+ add_meta_box( 'yarpp_display_rss', __( 'Display options <small>for RSS</small>', 'yarpp' ), array( new YARPP_Meta_Box_Display_Feed, 'display' ), 'settings_page_yarpp', 'normal', 'core' );
361
362
class YARPP_Meta_Box_Contact extends YARPP_Meta_Box {
363
function display() {
364
global $yarpp;
365
+ $pluginurl = plugin_dir_url( __FILE__ );
366
?>
367
<ul class='yarpp_contacts'>
368
+ <li><a href="http://wordpress.org/support/plugin/yet-another-related-posts-plugin" target="_blank"><span class='icon icon-wordpress'></span> <?php _e( 'YARPP Forum', 'yarpp' ); ?></a></li>
369
+ <li><a href="http://twitter.com/yarpp" target="_blank"><span class='icon icon-twitter'></span> <?php _e( 'YARPP on Twitter', 'yarpp' ); ?></a></li>
370
+ <li><a href="http://yarpp.org" target="_blank"><span class='icon icon-plugin'></span> <?php _e( 'YARPP on the Web', 'yarpp' ); ?></a></li>
371
+ <li><a href="http://wordpress.org/support/view/plugin-reviews/yet-another-related-posts-plugin" target="_blank"><span class='icon icon-star <?php if ( $yarpp->diagnostic_happy() ) echo 'spin'; ?>'></span> <?php _e( 'Review YARPP on WordPress.org', 'yarpp' ); ?></a></li>
372
+ <li><a href='http://tinyurl.com/donatetomitcho' target='_new'><span class='icon icon-paypal'></span> <img src="https://www.paypal.com/<?php echo $this->paypal_lang(); ?>i/btn/btn_donate_SM.gif" name="submit" alt="<?php _e( 'Donate to mitcho (Michael Yoshitaka Erlewine) for this plugin via PayPal' ); ?>" title="<?php _e( 'Donate to mitcho (Michael Yoshitaka Erlewine) for this plugin via PayPal', 'yarpp' ); ?>"/></a></li>
373
</ul>
374
<?php
375
}
376
377
function paypal_lang() {
378
+ if ( !defined( 'WPLANG' ) )
379
return 'en_US/';
380
+ switch ( substr( WPLANG, 0, 2 ) ) {
381
case 'fr':
382
return 'fr_FR/';
383
case 'de':
393
case 'pl':
394
return 'pl_PL/';
395
case 'zh':
396
+ if ( preg_match( "/^zh_(HK|TW)/i", WPLANG ) )
397
return 'zh_HK/';
398
// actually zh_CN, but interpret as default zh:
399
return 'zh_XC/';
402
}
403
}
404
}
405
+ add_meta_box( 'yarpp_display_optin', __( 'Help Improve YARPP', 'yarpp' ), array( new YARPP_Meta_Box_Optin, 'display' ), 'settings_page_yarpp', 'side', 'core' );
406
+
407
+ // longest filter name ever
408
+ add_filter( "postbox_classes_settings_page_yarpp_yarpp_display_optin", 'yarpp_make_optin_classy' );
409
+ function yarpp_make_optin_classy( $classes ) {
410
+ if ( !yarpp_get_option( 'optin' ) )
411
+ $classes[] = 'yarpp_attention';
412
+ return $classes;
413
+ }
414
415
class YARPP_Meta_Box_Optin extends YARPP_Meta_Box {
416
function display() {
417
global $yarpp;
418
419
+ if ( $yarpp->get_option( 'optin' ) )
420
$yarpp->optin_ping();
421
422
// TODO: fix this text and i18nize it
423
echo "<input type='checkbox' id='yarpp-optin' name='optin' value='true'";
424
+ checked( yarpp_get_option( 'optin' ) == 1 );
425
echo " /> ";
426
427
+ echo '<label for="yarpp-optin">' . __( 'Send settings and usage data back to YARPP', 'yarpp' ) . '</label>';
428
429
echo '<p>This is entirely optional, but will help improve future versions of YARPP. <input type="button" value="Learn More" id="yarpp-optin-learnmore" class="button button-small" style="float:right"/></p>';
430
}
431
}
432
433
+ add_meta_box( 'yarpp_display_contact', __( 'Contact YARPP', 'yarpp' ), array( new YARPP_Meta_Box_Contact, 'display' ), 'settings_page_yarpp', 'side', 'core' );
434
435
// since 3.3: hook for registering new YARPP meta boxes
436
do_action( 'add_meta_boxes_settings_page_yarpp' );
options.css CHANGED
@@ -15,6 +15,11 @@ ul.yarpp_contacts li a img {
15
vertical-align: bottom;
16
}
17
18
.icon {
19
width: 22px;
20
height: 22px;
@@ -106,8 +111,8 @@ a.yarpp_help:hover {
106
display: inline-block;
107
}
108
109
- #yarpp_display_optin {
110
- border-width: 2px;
111
}
112
113
.yarpp_subbox {
@@ -116,29 +121,45 @@ a.yarpp_help:hover {
116
}
117
.yarpp_form_row {
118
overflow: visible;
119
}
120
.yarpp_form_row > div {
121
- padding: 8px;
122
display: inline-block;
123
- vertical-align: top;
124
*display: inline;
125
}
126
.yarpp_form_checkbox > div {
127
- vertical-align: baseline;
128
}
129
.yarpp_form_select > div {
130
padding-top: 5px;
131
padding-bottom: 5px;
132
}
133
.yarpp_form_label {
134
width: 190px;
135
}
136
.yarpp_form_textbox > .yarpp_form_label {
137
- padding-top: 13px;
138
}
139
.yarpp_form_select > .yarpp_form_label {
140
padding-top: 8px;
141
}
142
143
.yarpp_code_display {
144
border-left: 8px transparent solid;
@@ -180,10 +201,14 @@ a.yarpp_help:hover {
180
font-family: monospace;
181
}
182
183
.yarpp_template_button {
184
position: relative;
185
height: 60px;
186
width: 70px;
187
-webkit-border-radius: 3px;
188
border-radius: 7px;
189
border: 1px solid #aaa;
@@ -262,4 +287,14 @@ a.yarpp_help:hover {
262
#optin_data_frame {
263
overflow: scroll;
264
max-height: 300px;
265
}
15
vertical-align: bottom;
16
}
17
18
+ /* hide pointer dismiss buttons on this page */
19
+ .postbox .wp-pointer-buttons {
20
+ display: none;
21
+ }
22
+
23
.icon {
24
width: 22px;
25
height: 22px;
111
display: inline-block;
112
}
113
114
+ #yarpp_display_optin.yarpp_attention {
115
+ border: 2px solid #bbb;
116
}
117
118
.yarpp_subbox {
121
}
122
.yarpp_form_row {
123
overflow: visible;
124
+ padding: 8px;
125
}
126
.yarpp_form_row > div {
127
display: inline-block;
128
*display: inline;
129
+ vertical-align: baseline;
130
}
131
.yarpp_form_checkbox > div {
132
}
133
.yarpp_form_select > div {
134
padding-top: 5px;
135
padding-bottom: 5px;
136
}
137
+ .yarpp_form_select + .yarpp_form_select {
138
+ padding-top: 0px;
139
+ }
140
.yarpp_form_label {
141
width: 190px;
142
}
143
+ .yarpp_form_label + div {
144
+ padding-left: 16px;
145
+ }
146
.yarpp_form_textbox > .yarpp_form_label {
147
}
148
.yarpp_form_select > .yarpp_form_label {
149
padding-top: 8px;
150
}
151
+ .yarpp_form_post_types label {
152
+ padding-right: 15px;
153
+ line-height: 20px;
154
+ }
155
+ .yarpp_form_exclude label {
156
+ padding-right: 5px;
157
+ line-height: 15px;
158
+ }
159
+ .yarpp_form_template_file > .yarpp_form_label {
160
+ vertical-align: top;
161
+ padding-top: 5px;
162
+ }
163
164
.yarpp_code_display {
165
border-left: 8px transparent solid;
201
font-family: monospace;
202
}
203
204
+ .yarpp_form_template_buttons {
205
+ padding: 0px;
206
+ }
207
.yarpp_template_button {
208
position: relative;
209
height: 60px;
210
width: 70px;
211
+ padding: 8px;
212
-webkit-border-radius: 3px;
213
border-radius: 7px;
214
border: 1px solid #aaa;
287
#optin_data_frame {
288
overflow: scroll;
289
max-height: 300px;
290
+ }
291
+
292
+ #yarpp_extra_screen_settings {
293
+ border-top: 1px solid #e0e0e0;
294
+ }
295
+
296
+ .help-tab-content {
297
+ max-height: 500px;
298
+ width: 100%;
299
+ overflow: auto;
300
}
options.php CHANGED
@@ -79,7 +79,6 @@ if ( $yarpp->myisam && !$yarpp->enabled() ) {
79
}
80
81
if (isset($_POST['update_yarpp'])) {
82
-
83
$new_options = array();
84
foreach ($yarpp->default_options as $option => $default) {
85
if ( is_bool($default) )
@@ -114,6 +113,12 @@ if (isset($_POST['update_yarpp'])) {
114
}
115
}
116
}
117
118
$new_options['recent'] = isset($_POST['recent_only']) ?
119
$_POST['recent_number'] . ' ' . $_POST['recent_units'] : false;
@@ -154,11 +159,20 @@ wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
154
wp_nonce_field( 'yarpp_display_demo', 'yarpp_display_demo-nonce', false );
155
wp_nonce_field( 'yarpp_display_exclude_terms', 'yarpp_display_exclude_terms-nonce', false );
156
wp_nonce_field( 'yarpp_optin_data', 'yarpp_optin_data-nonce', false );
157
if ( !count($yarpp->admin->get_templates()) && $yarpp->admin->can_copy_templates() )
158
wp_nonce_field( 'yarpp_copy_templates', 'yarpp_copy_templates-nonce', false );
159
?>
160
<div id="poststuff" class="metabox-holder has-right-sidebar">
161
162
<div class="inner-sidebar" id="side-info-column">
163
<?php
164
do_meta_boxes( 'settings_page_yarpp', 'side', array() );
79
}
80
81
if (isset($_POST['update_yarpp'])) {
82
$new_options = array();
83
foreach ($yarpp->default_options as $option => $default) {
84
if ( is_bool($default) )
113
}
114
}
115
}
116
+
117
+ if ( isset( $_POST['auto_display_post_types'] ) ) {
118
+ $new_options['auto_display_post_types'] = array_keys( $_POST['auto_display_post_types'] );
119
+ } else {
120
+ $new_options['auto_display_post_types'] = array();
121
+ }
122
123
$new_options['recent'] = isset($_POST['recent_only']) ?
124
$_POST['recent_number'] . ' ' . $_POST['recent_units'] : false;
159
wp_nonce_field( 'yarpp_display_demo', 'yarpp_display_demo-nonce', false );
160
wp_nonce_field( 'yarpp_display_exclude_terms', 'yarpp_display_exclude_terms-nonce', false );
161
wp_nonce_field( 'yarpp_optin_data', 'yarpp_optin_data-nonce', false );
162
+ wp_nonce_field( 'yarpp_set_display_code', 'yarpp_set_display_code-nonce', false );
163
if ( !count($yarpp->admin->get_templates()) && $yarpp->admin->can_copy_templates() )
164
wp_nonce_field( 'yarpp_copy_templates', 'yarpp_copy_templates-nonce', false );
165
?>
166
<div id="poststuff" class="metabox-holder has-right-sidebar">
167
168
+ <?php if ( !$yarpp->get_option('rss_display') ): ?>
169
+ <style>
170
+ .rss_displayed {
171
+ display: none;
172
+ }
173
+ </style>
174
+ <?php endif; ?>
175
+
176
<div class="inner-sidebar" id="side-info-column">
177
<?php
178
do_meta_boxes( 'settings_page_yarpp', 'side', array() );
readme.txt CHANGED
@@ -130,7 +130,13 @@ The official [YARPP Experiments](http://wordpress.org/extend/plugins/yarpp-exper
130
131
== Developing with YARPP ==
132
133
- = Custom displays and custom post type support =
134
135
Developers can call YARPP's powerful relatedness algorithm from anywhere in their own code. Some examples and more details are in [my slides from my WordCamp Birmingham talk](http://www.slideshare.net/mitcho/relate-all-the-things).
136
@@ -234,20 +240,30 @@ If you are a bilingual speaker of English and another language and an avid user
234
235
== Changelog ==
236
237
- = 3.6 =
238
* New thumbnail template option!
239
* No PHP required -- just visit the settings page
240
* Edit your theme's CSS file to modify the styling
241
- * All YARPP output is now wrapped in a `div` with class `yarpp-related`, `yarpp-related-widget`, or `yarpp-related-rss` as appropriate ([by request](https://wordpress.org/support/topic/adding-a-main-div-to-default-template)).
242
* [Bugfix](https://wordpress.org/support/topic/related-posts-disappearing-cache-issue): uses of `related_posts_exist()` and `get_related()` without explicit reference ID parameter would incorrectly return no related posts.
243
- * Improvements to YARPP custom template UI
244
* A new design for the template chooser
245
* A new "copy templates" button allows one-button installation of bundled templates into the current theme, if filesystem permissions make it possible.
246
* Header information in YARPP custom templates are now displayed to users in the settings UI. Available fields are `Template Name`, `Description`, `Author`, `Author URI`, in the same format as plugin and theme file headers. See bundled templates for examples.
247
* Code cleanup:
248
* Settings screen UI have been rewritten to use `div`s rather than `table`s!
249
* Inline help in settings screen now use WordPress pointers
250
* Removed keyword cache table, as it does not ctually improve performance much and the overhead of an additional table is not worth it.
251
* Added option to send YARPP setting and usage information back to YARPP (off by default). This information will be used to make more informed decisions about future YARPP development. More info available in the settings.
252
253
= 3.5.6 =
130
131
== Developing with YARPP ==
132
133
+ = Custom post types =
134
+
135
+ To make YARPP support your custom post type, the attribute `yarpp_support` must be set to true on the custom post type when it is registered. It will then be available on options on the YARPP settings page.
136
+
137
+ If you would like to programmatically control which post types are considered in an automatically-displayed related posts display, use the `yarpp_map_post_types` filter.
138
+
139
+ = Custom displays =
140
141
Developers can call YARPP's powerful relatedness algorithm from anywhere in their own code. Some examples and more details are in [my slides from my WordCamp Birmingham talk](http://www.slideshare.net/mitcho/relate-all-the-things).
142
240
241
== Changelog ==
242
243
+ = 4.0 =
244
* New thumbnail template option!
245
* No PHP required -- just visit the settings page
246
* Edit your theme's CSS file to modify the styling
247
+ * Auto display settings changes:
248
+ * Added an "also display in archives" option
249
* [Bugfix](https://wordpress.org/support/topic/related-posts-disappearing-cache-issue): uses of `related_posts_exist()` and `get_related()` without explicit reference ID parameter would incorrectly return no related posts.
250
+ * Changes to the output HTML:
251
+ * All YARPP output is now wrapped in a `div` with class `yarpp-related`, `yarpp-related-widget`, or `yarpp-related-rss` as appropriate ([by request](https://wordpress.org/support/topic/adding-a-main-div-to-default-template)). If there are no results, a `yarpp-related-none` class is added.
252
+ * The "related posts brought to you by YARPP" text is only added if there were results.
253
+ * Refinements to settings UI:
254
* A new design for the template chooser
255
+ * Example code display is now hidden by default; turn them back on from the "screen options" tab.
256
* A new "copy templates" button allows one-button installation of bundled templates into the current theme, if filesystem permissions make it possible.
257
* Header information in YARPP custom templates are now displayed to users in the settings UI. Available fields are `Template Name`, `Description`, `Author`, `Author URI`, in the same format as plugin and theme file headers. See bundled templates for examples.
258
* Code cleanup:
259
* Settings screen UI have been rewritten to use `div`s rather than `table`s!
260
* Inline help in settings screen now use WordPress pointers
261
* Removed keyword cache table, as it does not ctually improve performance much and the overhead of an additional table is not worth it.
262
+ * Default option changes:
263
+ * Default result count is now 4
264
+ * Default match threshold is now 4
265
+ * Default for "before related entries" heading uses `h3` instead of `p`
266
+ * Added `yarpp_map_post_types` filter to programmatically specify what post types should be looked at for automatic displays
267
* Added option to send YARPP setting and usage information back to YARPP (off by default). This information will be used to make more informed decisions about future YARPP development. More info available in the settings.
268
269
= 3.5.6 =
styles-thumbnails.php ADDED
@@ -0,0 +1,65 @@
1
+ <?php
2
+ /*
3
+ * Dynamic styles for YARPP's built-in thumbnails template
4
+ * @since 4
5
+ */
6
+
7
+ $height = 120;
8
+ $width = 120;
9
+
10
+ if ( isset($_GET['height']) )
11
+ $height = (int) $_GET['height'];
12
+ if ( isset($_GET['width']) )
13
+ $height = (int) $_GET['width'];
14
+
15
+ $margin = 5;
16
+ $width_with_margins = $width + 2 * $margin;
17
+ $height_with_text = $height + 50;
18
+ $extramargin = 7;
19
+
20
+ header( 'Content-Type: text/css' );
21
+
22
+ ?>
23
+ .yarpp-thumbnails-horizontal .yarpp-thumbnail, .yarpp-thumbnail-default, .yarpp-thumbnail-title {
24
+ display: inline-block;
25
+ *display: inline;
26
+ }
27
+ .yarpp-thumbnails-horizontal .yarpp-thumbnail {
28
+ border: 1px solid rgba(127,127,127,0.1);
29
+ width: <?php echo $width_with_margins; ?>px;
30
+ height: <?php echo $height_with_text; ?>px;
31
+ margin: <?php echo $margin; ?>px;
32
+ margin-left: 0px;
33
+ vertical-align: top;
34
+ }
35
+ .yarpp-thumbnail > img, .yarpp-thumbnail-default {
36
+ width: <?php echo $width; ?>px;
37
+ height: <?php echo $height; ?>px;
38
+ margin: <?php echo $margin; ?>px;
39
+ }
40
+ .yarpp-thumbnails-horizontal .yarpp-thumbnail > img, .yarpp-thumbnails-horizontal .yarpp-thumbnail-default {
41
+ margin-bottom: 0px;
42
+ display: block;
43
+ }
44
+ .yarpp-thumbnails-horizontal .yarpp-thumbnail-title {
45
+ font-size: 1em;
46
+ max-height: 2.8em;
47
+ line-height: 1.4em;
48
+ margin: <?php echo $extramargin; ?>px;
49
+ margin-top: 0px;
50
+ width: <?php echo $width; ?>px;
51
+ text-decoration: inherit;
52
+ overflow: hidden;
53
+ }
54
+
55
+ .yarpp-thumbnail-default {
56
+ overflow: hidden;
57
+ }
58
+ .yarpp-thumbnail-default > img.yarpp-thumbnail-default-wide {
59
+ height: <?php echo $height; ?>px;
60
+ max-width: none;
61
+ }
62
+ .yarpp-thumbnail-default > img.yarpp-thumbnail-default-tall {
63
+ width: <?php echo $width; ?>px;
64
+ max-height: none;
65
+ }
template-thumbnails.php CHANGED
@@ -1,7 +1,7 @@
1
<?php
2
/*
3
* YARPP's built-in thumbnails template
4
- * @since 3.6
5
*
6
* This template is used when you choose the built-in thumbnails option.
7
* If you want to create a new template, look at yarpp-templates/yarpp-template-example.php as an example.
@@ -27,10 +27,6 @@ if ( isset($size) ) {
27
$width = 120;
28
$height = 120;
29
}
30
- $margin = 5;
31
- $width_with_margins = $width + 2 * $margin;
32
- $height_with_text = $height + 50;
33
- $extramargin = 7;
34
35
// a little easter egg: if the default image URL is left blank,
36
// default to the theme's header image. (hopefully it has one)
@@ -61,50 +57,4 @@ if (have_posts()) {
61
$output .= $no_results;
62
}
63
64
- $output .= "
65
- <style>
66
- .yarpp-thumbnails-horizontal .yarpp-thumbnail, .yarpp-thumbnail-default, .yarpp-thumbnail-title {
67
- display: inline-block;
68
- *display: inline;
69
- }
70
- .yarpp-thumbnails-horizontal .yarpp-thumbnail {
71
- border: 1px solid rgba(127,127,127,0.1);
72
- width: {$width_with_margins}px;
73
- height: {$height_with_text}px;
74
- margin: {$margin}px;
75
- margin-left: 0px;
76
- vertical-align: top;
77
- }
78
- .yarpp-thumbnail > img, .yarpp-thumbnail-default {
79
- width: {$width}px;
80
- height: {$height}px;
81
- margin: {$margin}px;
82
- }
83
- .yarpp-thumbnails-horizontal .yarpp-thumbnail > img, .yarpp-thumbnails-horizontal .yarpp-thumbnail-default {
84
- margin-bottom: 0px;
85
- display: block;
86
- }
87
- .yarpp-thumbnails-horizontal .yarpp-thumbnail-title {
88
- font-size: 1em;
89
- max-height: 2.8em;
90
- line-height: 1.4em;
91
- margin: {$extramargin}px;
92
- margin-top: 0px;
93
- width: {$width}px;
94
- text-decoration: inherit;
95
- overflow: hidden;
96
- }
97
-
98
- .yarpp-thumbnail-default {
99
- overflow: hidden;
100
- }
101
- .yarpp-thumbnail-default > img.yarpp-thumbnail-default-wide {
102
- height: {$height}px;
103
- max-width: none;
104
- }
105
- .yarpp-thumbnail-default > img.yarpp-thumbnail-default-tall {
106
- width: {$width}px;
107
- max-height: none;
108
- }
109
- </style>
110
- ";
1
<?php
2
/*
3
* YARPP's built-in thumbnails template
4
+ * @since 4
5
*
6
* This template is used when you choose the built-in thumbnails option.
7
* If you want to create a new template, look at yarpp-templates/yarpp-template-example.php as an example.
27
$width = 120;
28
$height = 120;
29
}
30
31
// a little easter egg: if the default image URL is left blank,
32
// default to the theme's header image. (hopefully it has one)
57
$output .= $no_results;
58
}
59
60
+ wp_enqueue_style( "yarpp-thumbnails-$size", plugins_url( 'styles-thumbnails.php?' . http_build_query( compact('height','width') ), __FILE__ ), array(), YARPP_VERSION, 'all' );
yarpp.php CHANGED
@@ -3,13 +3,13 @@
3
Plugin Name: Yet Another Related Posts Plugin
4
Plugin URI: http://yarpp.org/
5
Description: Returns a list of related entries based on a unique algorithm for display on your blog and RSS feeds. Now with custom post type support!
6
- Version: 3.6b6
7
Author: mitcho (Michael Yoshitaka Erlewine)
8
Author URI: http://mitcho.com/
9
Donate link: http://tinyurl.com/donatetomitcho
10
*/
11
12
- define('YARPP_VERSION', '3.6b6');
13
define('YARPP_DIR', dirname(__FILE__));
14
define('YARPP_NO_RELATED', ':(');
15
define('YARPP_RELATED', ':)');
3
Plugin Name: Yet Another Related Posts Plugin
4
Plugin URI: http://yarpp.org/
5
Description: Returns a list of related entries based on a unique algorithm for display on your blog and RSS feeds. Now with custom post type support!
6
+ Version: 4.0b8
7
Author: mitcho (Michael Yoshitaka Erlewine)
8
Author URI: http://mitcho.com/
9
Donate link: http://tinyurl.com/donatetomitcho
10
*/
11
12
+ define('YARPP_VERSION', '4.0b8');
13
define('YARPP_DIR', dirname(__FILE__));
14
define('YARPP_NO_RELATED', ':(');
15
define('YARPP_RELATED', ':)');