Yet Another Related Posts Plugin (YARPP) - Version 3.6b5

Version Description

Download this release

Release Info

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

Code changes from version 3.6b4 to 3.6b5

Files changed (10) hide show
  1. class-admin.php +86 -8
  2. class-core.php +14 -4
  3. default.png +0 -0
  4. js/options.js +41 -38
  5. options-meta-boxes.php +30 -15
  6. options.css +7 -2
  7. options.php +1 -0
  8. readme.txt +3 -0
  9. template-thumbnails.php +110 -0
  10. yarpp.php +2 -2
class-admin.php CHANGED
@@ -23,6 +23,8 @@ class YARPP_Admin {
23
exit;
24
}
25
26
add_action( 'admin_init', array( $this, 'ajax_register' ) );
27
add_action( 'admin_menu', array( $this, 'ui_register' ) );
28
add_filter( 'current_screen', array( $this, 'settings_screen' ) );
@@ -64,17 +66,28 @@ class YARPP_Admin {
64
add_action( 'wp_ajax_yarpp_display_exclude_terms', array( $this, 'ajax_display_exclude_terms' ) );
65
add_action( 'wp_ajax_yarpp_display_demo', array( $this, 'ajax_display_demo' ) );
66
add_action( 'wp_ajax_yarpp_display', array( $this, 'ajax_display' ) );
67
}
68
}
69
70
function ui_register() {
71
global $wp_version;
72
- if ( get_option( 'yarpp_activated' ) && version_compare($wp_version, '3.3b1', '>=') ) {
73
- delete_option( 'yarpp_activated' );
74
- add_action( 'admin_enqueue_scripts', array( $this, 'pointer_enqueue' ) );
75
- add_action( 'admin_print_footer_scripts', array( $this, 'pointer_script' ) );
76
}
77
-
78
// setup admin
79
$this->hook = add_options_page(__('Related Posts (YARPP)','yarpp'),__('Related Posts (YARPP)','yarpp'), 'manage_options', 'yarpp', array( $this, 'options_page' ) );
80
@@ -145,8 +158,50 @@ class YARPP_Admin {
145
}
146
147
public function help_optin() {
148
- // TODO: add text
149
- echo 'rar';
150
}
151
152
// faux-markdown, required for the help text rendering
@@ -245,7 +300,7 @@ jQuery(function () {
245
</script>
246
<?php
247
}
248
-
249
function settings_link($links, $file) {
250
$this_plugin = dirname(plugin_basename(__FILE__)) . '/yarpp.php';
251
if($file == $this_plugin) {
@@ -398,4 +453,27 @@ jQuery(function () {
398
echo preg_replace("/[\n\r]/",'',nl2br(htmlspecialchars($return)));
399
exit;
400
}
401
}
23
exit;
24
}
25
26
+ //add_image_size( 'yarpp-thumbnail', $width, $height, $crop );
27
+
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' ) );
66
add_action( 'wp_ajax_yarpp_display_exclude_terms', array( $this, 'ajax_display_exclude_terms' ) );
67
add_action( 'wp_ajax_yarpp_display_demo', array( $this, 'ajax_display_demo' ) );
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
75
function ui_register() {
76
global $wp_version;
77
+ if ( get_option( 'yarpp_activated' ) ) {
78
+ if ( version_compare($wp_version, '3.3b1', '>=') ) {
79
+ delete_option( 'yarpp_activated' );
80
+ add_action( 'admin_enqueue_scripts', array( $this, 'pointer_enqueue' ) );
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' ) );
89
}
90
+
91
// setup admin
92
$this->hook = add_options_page(__('Related Posts (YARPP)','yarpp'),__('Related Posts (YARPP)','yarpp'), 'manage_options', 'yarpp', array( $this, 'options_page' ) );
93
158
}
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>';
168
+ $this->print_optin_button();
169
+ echo '</p>';
170
+ }
171
+
172
+ echo '<p>' . "If you opt-in, the following information is sent back to YARPP:" . '</p>';
173
+ echo '<div id="optin_data_frame"></div>';
174
+ echo '<p>' . "In addition, YARPP also loads an invisible pixel image with your YARPP results to know how often YARPP is being used." . '</p>';
175
+ }
176
+
177
+ function print_optin_button() {
178
+ echo '<a id="yarpp-optin-button" class="button">' . __('Send settings and usage data back to YARPP', 'yarpp') . '</a><span class="yarpp-thankyou" style="display:none"><strong>' . __('Thank you!', 'yarpp') . '</strong></span>';
179
+ wp_nonce_field( 'yarpp_optin', 'yarpp_optin-nonce', false );
180
+ echo "<script type='text/javascript'>
181
+ jQuery(function($){
182
+ $('#yarpp-optin-button').click(function() {
183
+ $(this)
184
+ .hide()
185
+ .siblings('.yarpp-thankyou').show('slow');
186
+ $('#yarpp-optin').attr('checked', true);
187
+ $.ajax({type:'POST',
188
+ url: ajaxurl,
189
+ data: {
190
+ action: 'yarpp_optin',
191
+ '_ajax_nonce': $('#yarpp_optin-nonce').val()
192
+ }});
193
+ });
194
+ });
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
207
// faux-markdown, required for the help text rendering
300
</script>
301
<?php
302
}
303
+
304
function settings_link($links, $file) {
305
$this_plugin = dirname(plugin_basename(__FILE__)) . '/yarpp.php';
306
if($file == $this_plugin) {
453
echo preg_replace("/[\n\r]/",'',nl2br(htmlspecialchars($return)));
454
exit;
455
}
456
+
457
+ function ajax_optin_data() {
458
+ check_ajax_referer( 'yarpp_optin_data' );
459
+
460
+ header("HTTP/1.1 200");
461
+ header("Content-Type: text/html; charset=UTF-8");
462
+
463
+ $data = $this->core->optin_data();
464
+ $this->core->pretty_echo($data);
465
+ exit;
466
+ }
467
+
468
+ function ajax_optin() {
469
+ check_ajax_referer( 'yarpp_optin' );
470
+
471
+ header("HTTP/1.1 200");
472
+ header("Content-Type: text; charset=UTF-8");
473
+
474
+ $data = yarpp_set_option('optin', true);
475
+ $this->core->optin_ping();
476
+ echo 'ok';
477
+ exit;
478
+ }
479
}
class-core.php CHANGED
@@ -104,7 +104,11 @@ class YARPP {
104
)
105
),
106
'require_tax' => array(), // new in 3.5
107
- 'optin' => false // new in 3.6
108
);
109
}
110
@@ -541,7 +545,8 @@ class YARPP {
541
'before_title', 'after_title', 'before_post', 'after_post',
542
'before_related', 'after_related', 'no_results', 'order',
543
'rss_before_title', 'rss_after_title', 'rss_before_post', 'rss_after_post', 'rss_before_related', 'rss_after_related', 'rss_no_results', 'rss_order',
544
- 'exclude'
545
);
546
547
$data = array(
@@ -565,7 +570,7 @@ class YARPP {
565
),
566
'users' => $wpdb->get_var("select count(ID) from $wpdb->users"),
567
),
568
- 'post_thumbnails' => current_theme_supports( 'post-thumbnails' ),
569
'locale' => get_bloginfo( 'language' ),
570
'url' => get_bloginfo('url'),
571
'plugins' => array(
@@ -687,6 +692,7 @@ class YARPP {
687
$this->prep_query( $current_query->is_feed );
688
$related_query = $wp_query; // backwards compatibility
689
690
$output = "<div class='";
691
if ( 'website' == $domain )
692
$output .= "yarpp-related";
@@ -867,7 +873,11 @@ class YARPP {
867
}
868
869
public function parse_args( $args, $options ) {
870
- $options_with_rss_variants = array( 'limit', 'template', 'excerpt_length', 'before_title', 'after_title', 'before_post', 'after_post', 'before_related', 'after_related', 'no_results', 'order', 'promote_yarpp' );
871
872
$r = array();
873
foreach ( $options as $option ) {
104
)
105
),
106
'require_tax' => array(), // new in 3.5
107
+ 'optin' => false, // new in 3.6
108
+ 'thumbnails_heading' => __('Related posts:','yarpp'), // new in 3.6
109
+ 'thumbnails_default' => plugins_url( 'default.png', __FILE__ ), // new in 3.6
110
+ 'rss_thumbnails_heading' => __('Related posts:','yarpp'), // new in 3.6
111
+ 'rss_thumbnails_default' => plugins_url( 'default.png', __FILE__ ) // new in 3.6
112
);
113
}
114
545
'before_title', 'after_title', 'before_post', 'after_post',
546
'before_related', 'after_related', 'no_results', 'order',
547
'rss_before_title', 'rss_after_title', 'rss_before_post', 'rss_after_post', 'rss_before_related', 'rss_after_related', 'rss_no_results', 'rss_order',
548
+ 'exclude', 'thumbnails_heading', 'thumbnails_default', 'rss_thumbnails_heading',
549
+ 'rss_thumbnails_default'
550
);
551
552
$data = array(
570
),
571
'users' => $wpdb->get_var("select count(ID) from $wpdb->users"),
572
),
573
+ 'post_thumbnails' => current_theme_supports( 'post-thumbnails', 'post' ),
574
'locale' => get_bloginfo( 'language' ),
575
'url' => get_bloginfo('url'),
576
'plugins' => array(
692
$this->prep_query( $current_query->is_feed );
693
$related_query = $wp_query; // backwards compatibility
694
695
+ // @todo: add these classes after the fact and include information about whether any results were given
696
$output = "<div class='";
697
if ( 'website' == $domain )
698
$output .= "yarpp-related";
873
}
874
875
public function parse_args( $args, $options ) {
876
+ $options_with_rss_variants = array(
877
+ 'limit', 'template', 'excerpt_length', 'before_title',
878
+ 'after_title', 'before_post', 'after_post', 'before_related',
879
+ 'after_related', 'no_results', 'order', 'promote_yarpp',
880
+ 'thumbnails_heading', 'thumbnails_default' );
881
882
$r = array();
883
foreach ( $options as $option ) {
default.png ADDED
Binary file
js/options.js CHANGED
@@ -3,27 +3,29 @@ jQuery(function($) {
3
postboxes.add_postbox_toggles(pagenow);
4
5
function template() {
6
- var value = $('#yarpp-use_template').val();
7
- if ( value == 'custom' ) {
8
- $('.templated').show();
9
- $('.not_templated').hide();
10
- } else {
11
- $('.templated').hide();
12
- $('.not_templated').show();
13
- }
14
- excerpt();
15
}
16
- $('.template').change(template);
17
- template();
18
19
function excerpt() {
20
- if (!$('.template').attr('checked') && $('#yarpp-show_excerpt').attr('checked'))
21
- $('.excerpted').show();
22
else
23
- $('.excerpted').hide();
24
}
25
- $('#yarpp-show_excerpt, .template').click(excerpt);
26
-
27
var loaded_demo_web = false;
28
function display() {
29
if ( !$('#yarpp_display_web .inside').is(':visible') )
@@ -66,34 +68,13 @@ jQuery(function($) {
66
success:function(html){demo_rss.html('<pre>'+html+'</pre>')},
67
dataType:'html'});
68
}
69
- rss_template();
70
} else {
71
$('.rss_displayed').hide();
72
}
73
}
74
$('#yarpp-rss_display, #yarpp_display_rss .handlediv, #yarpp_display_rss-hide').click(rss_display);
75
rss_display();
76
-
77
- function rss_template() {
78
- var value = $('#yarpp-rss_use_template').val();
79
- if ( value == 'custom' ) {
80
- $('.rss_templated').show();
81
- $('.rss_not_templated').hide();
82
- } else {
83
- $('.rss_templated').hide();
84
- $('.rss_not_templated').show();
85
- }
86
- rss_excerpt();
87
- }
88
- $('.rss_template').change(rss_template);
89
-
90
- function rss_excerpt() {
91
- if ($('#yarpp-rss_display').attr('checked') && $('#yarpp-rss_show_excerpt').attr('checked'))
92
- $('.rss_excerpted').show();
93
- else
94
- $('.rss_excerpted').hide();
95
- }
96
- $('#yarpp-rss_display, #yarpp-rss_show_excerpt').click(rss_excerpt);
97
98
var loaded_disallows = false;
99
function load_disallows() {
@@ -234,4 +215,26 @@ jQuery(function($) {
234
$('#template_file, #rss_template_file')
235
.each(template_info)
236
.change(template_info);
237
});
3
postboxes.add_postbox_toggles(pagenow);
4
5
function template() {
6
+ var metabox = $(this).closest('#yarpp_display_web, #yarpp_display_rss');
7
+ if ( !metabox.length )
8
+ return;
9
+
10
+ value = metabox.find('.use_template').val();
11
+
12
+ metabox.find('.yarpp_subbox').hide();
13
+ metabox.find('.template_options_' + value).show();
14
+ excerpt.apply(metabox);
15
}
16
+ $('.use_template').each(template).change(template);
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
+
29
var loaded_demo_web = false;
30
function display() {
31
if ( !$('#yarpp_display_web .inside').is(':visible') )
68
success:function(html){demo_rss.html('<pre>'+html+'</pre>')},
69
dataType:'html'});
70
}
71
+ $('#yarpp_display_rss').each(template);
72
} else {
73
$('.rss_displayed').hide();
74
}
75
}
76
$('#yarpp-rss_display, #yarpp_display_rss .handlediv, #yarpp_display_rss-hide').click(rss_display);
77
rss_display();
78
79
var loaded_disallows = false;
80
function load_disallows() {
215
$('#template_file, #rss_template_file')
216
.each(template_info)
217
.change(template_info);
218
+
219
+ var loaded_optin_data = false;
220
+ function _display_optin_data() {
221
+ if ( !$('#optin_data_frame').is(':visible') || loaded_optin_data )
222
+ return;
223
+ loaded_optin_data = true;
224
+ var frame = $('#optin_data_frame');
225
+ $.ajax({type:'POST',
226
+ url: ajaxurl,
227
+ data: {
228
+ action: 'yarpp_optin_data',
229
+ '_ajax_nonce': $('#yarpp_optin_data-nonce').val()
230
+ },
231
+ beforeSend:function(){frame.html(loading)},
232
+ success:function(html){frame.html('<pre>'+html+'</pre>')},
233
+ dataType:'html'});
234
+ }
235
+ function display_optin_data() {
236
+ setTimeout(_display_optin_data, 0);
237
+ }
238
+ $('#yarpp-optin-learnmore, a[aria-controls=tab-panel-optin]').bind('click focus', display_optin_data);
239
+ display_optin_data();
240
});
options-meta-boxes.php CHANGED
@@ -32,13 +32,16 @@ class YARPP_Meta_Box {
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'>" . __('Basic list', 'yarpp') . "</div></div>";
36
37
- echo "<div data-value='thumbnails' class='yarpp_template_button disabled";
38
if ( 'thumbnails' == $choice )
39
echo ' active';
40
echo "'";
41
- echo " data-help='not implemented yet -- mitcho'";
42
echo "><div class='image'></div><div class='label'>" . __('Thumbnails', 'yarpp') . "</div></div>";
43
44
echo "<div data-value='custom' class='yarpp_template_button";
@@ -55,7 +58,7 @@ class YARPP_Meta_Box {
55
}
56
echo "><div class='image'></div><div class='label'>" . __('Custom', 'yarpp') . "</div></div>";
57
58
- echo "<input type='hidden' name='{$pre}use_template' id='yarpp-{$pre}use_template' class='{$pre}template' value='{$choice}' />";
59
60
echo "</div>";
61
@@ -234,21 +237,27 @@ class YARPP_Meta_Box_Display_Web extends YARPP_Meta_Box {
234
$this->template_checkbox( false );
235
echo "</div>";
236
237
- echo "<div class='postbox yarpp_subbox templated'>";
238
echo '<div class="yarpp_form_row"><div>' . $this->template_text . '</div></div>';
239
$this->template_file( false );
240
echo "</div>";
241
242
- echo "<div class='postbox yarpp_subbox not_templated'>";
243
$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;');
244
$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;');
245
246
- $this->checkbox('show_excerpt', __("Show excerpt?",'yarpp'), '');
247
$this->textbox('excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'excerpted');
248
249
$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;');
250
251
- $this->textbox('no_results', __('Default display if no results:','yarpp'), 40, '');
252
echo "</div>";
253
254
$this->displayorder('order');
@@ -274,19 +283,25 @@ class YARPP_Meta_Box_Display_Feed extends YARPP_Meta_Box {
274
$this->template_checkbox( true, 'rss_displayed' );
275
echo "</div>";
276
277
- echo "<div class='postbox yarpp_subbox rss_templated rss_displayed'>";
278
echo '<div class="yarpp_form_row"><div>' . $this->template_text . '</div></div>';
279
$this->template_file( true );
280
echo "</div>";
281
282
- echo "<div class='postbox yarpp_subbox rss_not_templated rss_displayed'>";
283
$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;');
284
$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;');
285
286
- $this->checkbox('rss_show_excerpt', __("Show excerpt?",'yarpp'));
287
- $this->textbox('rss_excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'rss_excerpted');
288
289
- $this->beforeafter(array('rss_before_post', 'rss_after_post'),__("Before / after (excerpt):",'yarpp'), 10, 'rss_excerpted', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
290
291
$this->textbox('rss_no_results', __('Default display if no results:','yarpp'), 40);
292
echo "</div>";
@@ -353,11 +368,11 @@ class YARPP_Meta_Box_Optin extends YARPP_Meta_Box {
353
$yarpp->optin_ping();
354
355
// TODO: fix this text and i18nize it
356
- echo "<input type='checkbox' id='optin' name='optin' value='true'";
357
checked(yarpp_get_option('optin') == 1);
358
echo " /> ";
359
360
- echo '<label for="optin">' . __('Send YARPP settings and usage data back to YARPP.', 'yarpp') . '</label>';
361
362
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>';
363
}
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 )
39
echo ' active';
40
+ if ( !current_theme_supports( 'post-thumbnails', 'post' ) )
41
+ echo ' disabled';
42
echo "'";
43
+ if ( !current_theme_supports( 'post-thumbnails', 'post' ) )
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";
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
63
echo "</div>";
64
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');
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>";
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
}
options.css CHANGED
@@ -147,7 +147,7 @@ a.yarpp_help:hover {
147
}
148
.yarpp_code_display div {
149
overflow: auto;
150
- max-height: 500px;
151
}
152
.yarpp_scroll_wrapper {
153
overflow: auto;
@@ -176,7 +176,7 @@ a.yarpp_help:hover {
176
font-family: monospace;
177
}
178
179
- .not_templated input[type=text], .rss_not_templated input[type=text] {
180
font-family: monospace;
181
}
182
@@ -257,4 +257,9 @@ a.yarpp_help:hover {
257
}
258
.yarpp_template_button[data-value=custom] > div.image {
259
background-position: -140px 0px;
260
}
147
}
148
.yarpp_code_display div {
149
overflow: auto;
150
+ max-height: 300px;
151
}
152
.yarpp_scroll_wrapper {
153
overflow: auto;
176
font-family: monospace;
177
}
178
179
+ .yarpp_subbox input[type=text], .yarpp_subbox input[type=text] {
180
font-family: monospace;
181
}
182
257
}
258
.yarpp_template_button[data-value=custom] > div.image {
259
background-position: -140px 0px;
260
+ }
261
+
262
+ #optin_data_frame {
263
+ overflow: scroll;
264
+ max-height: 300px;
265
}
options.php CHANGED
@@ -153,6 +153,7 @@ wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
153
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
if ( !count($yarpp->admin->get_templates()) && $yarpp->admin->can_copy_templates() )
157
wp_nonce_field( 'yarpp_copy_templates', 'yarpp_copy_templates-nonce', false );
158
?>
153
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
?>
readme.txt CHANGED
@@ -235,6 +235,9 @@ If you are a bilingual speaker of English and another language and an avid user
235
== Changelog ==
236
237
= 3.6 =
238
* 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)).
239
* Improvements to YARPP custom template UI
240
* A new design for the template chooser
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
* Improvements to YARPP custom template UI
243
* A new design for the template chooser
template-thumbnails.php ADDED
@@ -0,0 +1,110 @@
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.
8
+ * More information on the custom templates is available at http://mitcho.com/blog/projects/yarpp-3-templates/
9
+ */
10
+
11
+ $options = array( 'thumbnails_heading', 'thumbnails_default', 'no_results' );
12
+ extract( $this->parse_args( $args, $options ) );
13
+
14
+ global $_wp_additional_image_sizes;
15
+
16
+ // @todo: add support for other theme-specified sizes?
17
+ // if ( isset($_wp_additional_image_sizes['yarpp-thumbnail']) )
18
+ // $size = 'yarpp-thumbnail';
19
+ // elseif ( isset($_wp_additional_image_sizes['post-thumbnail']) )
20
+ // $size = 'post-thumbnail';
21
+
22
+ if ( isset($size) ) {
23
+ $width = (int) $_wp_additional_image_sizes[$size]['width'];
24
+ $height = (int) $_wp_additional_image_sizes[$size]['height'];
25
+ } else {
26
+ $size = '120x120'; // the ultimate default
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)
37
+ if ( empty($thumbnails_default) )
38
+ $thumbnails_default = get_header_image();
39
+
40
+ $output .= '<h3>' . $thumbnails_heading . '</h3>' . "\n";
41
+
42
+ if (have_posts()) {
43
+ $output .= '<div class="yarpp-thumbnails-horizontal">' . "\n";
44
+ while (have_posts()) {
45
+ the_post();
46
+
47
+ $output .= "<a class='yarpp-thumbnail' href='" . get_permalink() . "' title='" . the_title_attribute('echo=0') . "'>" . "\n";
48
+
49
+ if ( has_post_thumbnail() )
50
+ $output .= get_the_post_thumbnail( null, $size );
51
+ else
52
+ $output .= '<span class="yarpp-thumbnail-default"><img class="yarpp-thumbnail-default-wide" src="' . esc_url($thumbnails_default) . '"/></span>';
53
+ // assume default images (header images) are wider than they are tall
54
+
55
+ $output .= '<span class="yarpp-thumbnail-title">' . get_the_title() . '</span>';
56
+ $output .= '</a>' . "\n";
57
+
58
+ }
59
+ $output .= "</div>\n";
60
+ } else {
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
+ ";
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.6b4
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.6b4');
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: 3.6b5
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.6b5');
13
define('YARPP_DIR', dirname(__FILE__));
14
define('YARPP_NO_RELATED', ':(');
15
define('YARPP_RELATED', ':)');