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

Version Description

Download this release

Release Info

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

Code changes from version 3.6b1 to 3.6b2

class-admin.php CHANGED
@@ -14,6 +14,14 @@ class YARPP_Admin {
14
wp_redirect( admin_url( '/options-general.php?page=yarpp' ) );
15
exit;
16
}
17
18
add_action( 'admin_init', array( $this, 'ajax_register' ) );
19
add_action( 'admin_menu', array( $this, 'ui_register' ) );
@@ -30,11 +38,26 @@ class YARPP_Admin {
30
if ( $this->templates === false )
31
$this->templates = array();
32
// get basenames only
33
- $this->templates = array_map('basename', $this->templates);
34
}
35
return (array) $this->templates;
36
}
37
38
function ajax_register() {
39
// Register AJAX services
40
if ( defined('DOING_AJAX') && DOING_AJAX ) {
@@ -236,7 +259,7 @@ jQuery(function () {
236
require(YARPP_DIR.'/options.php');
237
}
238
239
- // since 3.4: don't actually compute results here, but use ajax instead
240
function metabox() {
241
?>
242
<style>
@@ -259,13 +282,39 @@ jQuery(function () {
259
}
260
}
261
262
- // since 3.3: default metaboxes to show:
263
function default_hidden_meta_boxes($hidden, $screen) {
264
if ( 'settings_page_yarpp' == $screen->id )
265
$hidden = array( 'yarpp_pool', 'yarpp_relatedness' );
266
return $hidden;
267
}
268
269
/*
270
* AJAX SERVICES
271
*/
14
wp_redirect( admin_url( '/options-general.php?page=yarpp' ) );
15
exit;
16
}
17
+
18
+ // if action=flush and the nonce is correct, reset the cache
19
+ if ( isset($_GET['action']) && $_GET['action'] == 'copy_templates' &&
20
+ check_ajax_referer( 'yarpp_copy_templates', false, false ) !== false ) {
21
+ $this->copy_templates();
22
+ wp_redirect( admin_url( '/options-general.php?page=yarpp' ) );
23
+ exit;
24
+ }
25
26
add_action( 'admin_init', array( $this, 'ajax_register' ) );
27
add_action( 'admin_menu', array( $this, 'ui_register' ) );
38
if ( $this->templates === false )
39
$this->templates = array();
40
// get basenames only
41
+ $this->templates = array_map(array($this, 'get_template_data'), $this->templates);
42
}
43
return (array) $this->templates;
44
}
45
46
+ public function get_template_data( $file ) {
47
+ $headers = array(
48
+ 'name' => 'Template Name',
49
+ 'description' => 'Description',
50
+ 'author' => 'Author',
51
+ 'uri' => 'Author URI',
52
+ );
53
+ $data = get_file_data( $file, $headers );
54
+ $data['file'] = $file;
55
+ $data['basename'] = basename($file);
56
+ if ( empty($data['name']) )
57
+ $data['name'] = $data['basename'];
58
+ return $data;
59
+ }
60
+
61
function ajax_register() {
62
// Register AJAX services
63
if ( defined('DOING_AJAX') && DOING_AJAX ) {
259
require(YARPP_DIR.'/options.php');
260
}
261
262
+ // @since 3.4: don't actually compute results here, but use ajax instead
263
function metabox() {
264
?>
265
<style>
282
}
283
}
284
285
+ // @since 3.3: default metaboxes to show:
286
function default_hidden_meta_boxes($hidden, $screen) {
287
if ( 'settings_page_yarpp' == $screen->id )
288
$hidden = array( 'yarpp_pool', 'yarpp_relatedness' );
289
return $hidden;
290
}
291
292
+ // @since 3.6: UI to copy templates
293
+ function can_copy_templates() {
294
+ $theme_dir = get_stylesheet_directory();
295
+ // If we can't write to the theme, return false
296
+ if ( !is_dir($theme_dir) || !is_writable($theme_dir) )
297
+ return false;
298
+
299
+ require_once(ABSPATH . 'wp-admin/includes/file.php');
300
+ WP_Filesystem( false, get_stylesheet_directory() );
301
+ global $wp_filesystem;
302
+ // direct method is the only method that I've tested so far
303
+ return $wp_filesystem->method == 'direct';
304
+ }
305
+
306
+ function copy_templates() {
307
+ $templates_dir = trailingslashit(trailingslashit(YARPP_DIR) . 'yarpp-templates');
308
+
309
+ require_once(ABSPATH . 'wp-admin/includes/file.php');
310
+ WP_Filesystem( false, get_stylesheet_directory() );
311
+ global $wp_filesystem;
312
+ if ( $wp_filesystem->method != 'direct' )
313
+ return false;
314
+
315
+ return copy_dir( $templates_dir, get_stylesheet_directory(), array('.svn') );
316
+ }
317
+
318
/*
319
* AJAX SERVICES
320
*/
class-core.php CHANGED
@@ -565,6 +565,7 @@ class YARPP {
565
),
566
'users' => $wpdb->get_var("select count(ID) from $wpdb->users"),
567
),
568
'locale' => get_bloginfo( 'language' ),
569
'url' => get_bloginfo('url'),
570
'plugins' => array(
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(
class-widget.php CHANGED
@@ -75,7 +75,7 @@ class YARPP_Widget extends WP_Widget {
75
<p><input class="checkbox" id="<?php echo $this->get_field_id('use_template'); ?>" name="<?php echo $this->get_field_name('use_template'); ?>" type="checkbox" <?php checked(!!$instance['template']) ?> /> <label for="<?php echo $this->get_field_id('use_template'); ?>"><?php _e("Display using a custom template file",'yarpp');?></label></p>
76
<p id="<?php echo $this->get_field_id('template_file_p'); ?>"><label for="<?php echo $this->get_field_id('template_file'); ?>"><?php _e("Template file:",'yarpp');?></label> <select name="<?php echo $this->get_field_name('template_file'); ?>" id="<?php echo $this->get_field_id('template_file'); ?>">
77
<?php foreach ($templates as $template): ?>
78
- <option value='<?php echo esc_attr($template); ?>'<?php selected($template, $instance['template']);?>><?php echo esc_html($template); ?></option>
79
<?php endforeach; ?>
80
</select><p>
81
<script type="text/javascript">
75
<p><input class="checkbox" id="<?php echo $this->get_field_id('use_template'); ?>" name="<?php echo $this->get_field_name('use_template'); ?>" type="checkbox" <?php checked(!!$instance['template']) ?> /> <label for="<?php echo $this->get_field_id('use_template'); ?>"><?php _e("Display using a custom template file",'yarpp');?></label></p>
76
<p id="<?php echo $this->get_field_id('template_file_p'); ?>"><label for="<?php echo $this->get_field_id('template_file'); ?>"><?php _e("Template file:",'yarpp');?></label> <select name="<?php echo $this->get_field_name('template_file'); ?>" id="<?php echo $this->get_field_id('template_file'); ?>">
77
<?php foreach ($templates as $template): ?>
78
+ <option value='<?php echo esc_attr($template['basename']); ?>'<?php selected($template['basename'], $instance['template']);?>><?php echo esc_html($template['name']); ?></option>
79
<?php endforeach; ?>
80
</select><p>
81
<script type="text/javascript">
js/options.js CHANGED
@@ -161,16 +161,49 @@ jQuery(function($) {
161
});
162
163
$('.yarpp_help[data-help]').hover(function() {
164
- var help = '<p>' + $(this).attr('data-help') + '</p>',
165
options = {
166
content: help,
167
position: {
168
edge: 'left',
169
align: 'center',
170
- of: $(this)
171
- }};
172
173
- var pointer = $(this).pointer(options).pointer('open');
174
- $(this).closest('.yarpp_form_row, p').mouseleave(function () { pointer.pointer('close'); });
175
});
176
});
161
});
162
163
$('.yarpp_help[data-help]').hover(function() {
164
+ var that = $(this),
165
+ help = '<p>' + that.attr('data-help') + '</p>',
166
options = {
167
content: help,
168
position: {
169
edge: 'left',
170
align: 'center',
171
+ of: that
172
+ },
173
+ document: {body: that}
174
+ };
175
176
+ var pointer = that.pointer(options).pointer('open');
177
+ that.closest('.yarpp_form_row, p').mouseleave(function () {
178
+ pointer.pointer('close');
179
+ });
180
});
181
+
182
+ $('.yarpp_copy_templates_button').live('click', function() {
183
+ window.location = window.location + (window.location.search.length ? '&' : '?') + 'action=copy_templates&_ajax_nonce=' + $('#yarpp_copy_templates-nonce').val();
184
+ });
185
+
186
+ function template_info() {
187
+ var template = $(this).find('option:selected'),
188
+ row = template.closest('.yarpp_form_row');
189
+ if ( !!template.attr('data-url') ) {
190
+ row.find('.template_author_wrap')
191
+ .toggle( !!template.attr('data-author') )
192
+ .find('span').empty().append('<a>' + template.attr('data-author') + '</a>')
193
+ .attr('href', template.attr('data-url'));
194
+ } else {
195
+ row.find('.template_author_wrap')
196
+ .toggle( !!template.attr('data-author') )
197
+ .find('span').text(template.attr('data-author'));
198
+ }
199
+ row.find('.template_description_wrap')
200
+ .toggle( !!template.attr('data-description') )
201
+ .find('span').text(template.attr('data-description'));
202
+ row.find('.template_file_wrap')
203
+ .toggle( !!template.attr('data-basename') )
204
+ .find('span').text(template.attr('data-basename'));
205
+ }
206
+ $('#template_file, #rss_template_file')
207
+ .each(template_info)
208
+ .change(template_info);
209
});
options-meta-boxes.php CHANGED
@@ -7,14 +7,25 @@ class YARPP_Meta_Box {
7
checked(yarpp_get_option($option) == 1);
8
echo " /> <label for='yarpp-$option'>$desc</label></div></div>";
9
}
10
function template_checkbox( $rss = false, $class = '' ) {
11
global $yarpp;
12
$pre = $rss ? 'rss_' : '';
13
$chosen_template = yarpp_get_option( "{$pre}template" );
14
- echo "<div class='yarpp_form_row $class'><div><input type='checkbox' name='{$pre}use_template' class='{$pre}template' value='true'";
15
- disabled(!count($yarpp->admin->get_templates()), true);
16
checked( !!$chosen_template );
17
- echo " /> <label for='yarpp-{$pre}use_template'>" . __("Display using a custom template file",'yarpp')." <span class='yarpp_help' data-help='" . esc_attr(__("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')) . "'>&nbsp;</span>" . "</label></div></div>";
18
}
19
function template_file( $rss = false, $class = '' ) {
20
global $yarpp;
@@ -23,10 +34,13 @@ class YARPP_Meta_Box {
23
_e("Template file:",'yarpp');
24
echo "</div><div><select name='{$pre}template_file' id='{$pre}template_file'>";
25
$chosen_template = yarpp_get_option("{$pre}template");
26
- foreach ($yarpp->admin->get_templates() as $template): ?>
27
- <option value='<?php echo esc_attr($template)?>'<?php selected($template, $chosen_template);?>><?php echo esc_html($template)?></option>
28
- <?php endforeach;
29
- echo "</select></div></div>";
30
}
31
function textbox($option, $desc, $size=2, $class='', $note = '') {
32
$value = esc_attr(yarpp_get_option($option));
@@ -179,24 +193,31 @@ class YARPP_Meta_Box_Display_Web extends YARPP_Meta_Box {
179
function display() {
180
global $yarpp;
181
182
- 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>";
183
- $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>");
184
-
185
- $this->textbox('limit',__('Maximum number of related posts:','yarpp'));
186
- $this->template_checkbox( false );
187
- $this->template_file( false, 'templated' );
188
-
189
- $this->beforeafter(array('before_related', 'after_related'),__("Before / after related entries:",'yarpp'), 15, 'not_templated', __("For example:",'yarpp') . ' &lt;ol&gt;&lt;/ol&gt;' . __(' or ','yarpp') . '&lt;div&gt;&lt;/div&gt;');
190
- $this->beforeafter(array('before_title', 'after_title'),__("Before / after each related entry:",'yarpp'),15, 'not_templated', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
191
-
192
- $this->checkbox('show_excerpt', __("Show excerpt?",'yarpp'), 'not_templated');
193
- $this->textbox('excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'excerpted');
194
-
195
- $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;');
196
-
197
- $this->displayorder('order');
198
-
199
- $this->textbox('no_results', __('Default display if no results:','yarpp'), 40, 'not_templated');
200
201
$this->checkbox('promote_yarpp',__("Help promote Yet Another Related Posts Plugin?",'yarpp')
202
." <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>");
@@ -209,27 +230,34 @@ class YARPP_Meta_Box_Display_Feed extends YARPP_Meta_Box {
209
function display() {
210
global $yarpp;
211
212
- 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>";
213
214
- $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>",'');
215
- $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');
216
217
- $this->textbox('rss_limit',__('Maximum number of related posts:','yarpp'), 2, 'rss_displayed');
218
- $this->template_checkbox( true, 'rss_displayed' );
219
- $this->template_file( true, 'rss_templated' );
220
-
221
- $this->beforeafter(array('rss_before_related', 'rss_after_related'),__("Before / after related entries:",'yarpp'), 15, 'rss_not_templated rss_displayed', __("For example:",'yarpp') . ' &lt;ol&gt;&lt;/ol&gt;' . __(' or ','yarpp') . '&lt;div&gt;&lt;/div&gt;');
222
- $this->beforeafter(array('rss_before_title', 'rss_after_title'),__("Before / after each related entry:",'yarpp'), 15, 'rss_not_templated rss_displayed', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
223
224
- $this->checkbox('rss_show_excerpt', __("Show excerpt?",'yarpp'), 'rss_not_templated rss_displayed');
225
- $this->textbox('rss_excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'rss_excerpted');
226
-
227
- $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;');
228
229
- $this->displayorder('rss_order', 'rss_displayed');
230
231
- $this->textbox('rss_no_results', __('Default display if no results:','yarpp'), 40, 'rss_not_templated rss_displayed');
232
233
$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');
234
}
235
}
@@ -296,7 +324,7 @@ class YARPP_Meta_Box_Optin extends YARPP_Meta_Box {
296
297
echo '<label for="optin">' . __('Send YARPP settings and usage data back to YARPP.', 'yarpp') . '</label>';
298
299
- 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>';
300
}
301
}
302
7
checked(yarpp_get_option($option) == 1);
8
echo " /> <label for='yarpp-$option'>$desc</label></div></div>";
9
}
10
+
11
+ private function offer_copy_templates() {
12
+ global $yarpp;
13
+ return ( !count($yarpp->admin->get_templates()) && $yarpp->admin->can_copy_templates() );
14
+ }
15
+
16
function template_checkbox( $rss = false, $class = '' ) {
17
global $yarpp;
18
$pre = $rss ? 'rss_' : '';
19
$chosen_template = yarpp_get_option( "{$pre}template" );
20
+ echo "<div class='yarpp_form_row $class'><div><input type='checkbox' name='{$pre}use_template' id='yarpp-{$pre}use_template' class='{$pre}template' value='true'";
21
+ disabled( !count($yarpp->admin->get_templates()), true );
22
checked( !!$chosen_template );
23
+ echo ' /> ';
24
+
25
+ // todo: i18n
26
+ $copy = "</p><p style='border-top: 1px solid #333; padding-top: 10px;'>This option is disabled because no YARPP templates were found in your theme. Would you like to copy some sample templates bundled with YARPP into your theme? <input type='button' class='button button-small yarpp_copy_templates_button' value='Copy Templates'/>";
27
+
28
+ echo "<label for='yarpp-{$pre}use_template'>" . __("Display using a custom template file",'yarpp')." <span class='yarpp_help' data-help='" . esc_attr(__("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') . ( $this->offer_copy_templates() ? $copy : '')) . "'>&nbsp;</span>" . "</label></div></div>";
29
}
30
function template_file( $rss = false, $class = '' ) {
31
global $yarpp;
34
_e("Template file:",'yarpp');
35
echo "</div><div><select name='{$pre}template_file' id='{$pre}template_file'>";
36
$chosen_template = yarpp_get_option("{$pre}template");
37
+ foreach ($yarpp->admin->get_templates() as $template) {
38
+ echo "<option value='" . esc_attr($template['basename']) . "'" . selected($template['basename'], $chosen_template, false);
39
+ foreach ( $template as $key => $value )
40
+ echo " data-{$key}='" . esc_attr($value) . "'";
41
+ echo '>' . esc_html($template['name']) . '</option>';
42
+ }
43
+ 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>";
44
}
45
function textbox($option, $desc, $size=2, $class='', $note = '') {
46
$value = esc_attr(yarpp_get_option($option));
193
function display() {
194
global $yarpp;
195
196
+ echo "<div style='overflow:hidden'>";
197
+ 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>";
198
+ $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>");
199
+
200
+ $this->textbox('limit',__('Maximum number of related posts:','yarpp'));
201
+ $this->template_checkbox( false );
202
+ echo "</div>";
203
+
204
+ echo "<div class='postbox yarpp_subbox templated'>";
205
+ $this->template_file( false, 'templated' );
206
+ echo "</div>";
207
+
208
+ echo "<div class='postbox yarpp_subbox not_templated'>";
209
+ $this->beforeafter(array('before_related', 'after_related'),__("Before / after related entries:",'yarpp'), 15, 'not_templated', __("For example:",'yarpp') . ' &lt;ol&gt;&lt;/ol&gt;' . __(' or ','yarpp') . '&lt;div&gt;&lt;/div&gt;');
210
+ $this->beforeafter(array('before_title', 'after_title'),__("Before / after each related entry:",'yarpp'),15, 'not_templated', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
211
+
212
+ $this->checkbox('show_excerpt', __("Show excerpt?",'yarpp'), 'not_templated');
213
+ $this->textbox('excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'excerpted');
214
+
215
+ $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;');
216
+
217
+ $this->displayorder('order');
218
+
219
+ $this->textbox('no_results', __('Default display if no results:','yarpp'), 40, 'not_templated');
220
+ echo "</div>";
221
222
$this->checkbox('promote_yarpp',__("Help promote Yet Another Related Posts Plugin?",'yarpp')
223
." <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>");
230
function display() {
231
global $yarpp;
232
233
+ echo "<div style='overflow:hidden'>";
234
+ 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>";
235
236
+ $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>",'');
237
+ $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');
238
239
+ $this->textbox('rss_limit',__('Maximum number of related posts:','yarpp'), 2, 'rss_displayed');
240
+ $this->template_checkbox( true, 'rss_displayed' );
241
+ echo "</div>";
242
243
+ echo "<div class='postbox yarpp_subbox rss_templated rss_displayed'>";
244
+ $this->template_file( true, 'rss_templated' );
245
+ echo "</div>";
246
247
+ echo "<div class='postbox yarpp_subbox rss_not_templated rss_displayed'>";
248
+ $this->beforeafter(array('rss_before_related', 'rss_after_related'),__("Before / after related entries:",'yarpp'), 15, 'rss_not_templated rss_displayed', __("For example:",'yarpp') . ' &lt;ol&gt;&lt;/ol&gt;' . __(' or ','yarpp') . '&lt;div&gt;&lt;/div&gt;');
249
+ $this->beforeafter(array('rss_before_title', 'rss_after_title'),__("Before / after each related entry:",'yarpp'), 15, 'rss_not_templated rss_displayed', __("For example:",'yarpp') . ' &lt;li&gt;&lt;/li&gt;' . __(' or ','yarpp') . '&lt;dl&gt;&lt;/dl&gt;');
250
+
251
+ $this->checkbox('rss_show_excerpt', __("Show excerpt?",'yarpp'), 'rss_not_templated rss_displayed');
252
+ $this->textbox('rss_excerpt_length', __('Excerpt length (No. of words):','yarpp'), 10, 'rss_excerpted');
253
254
+ $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;');
255
256
+ $this->displayorder('rss_order', 'rss_displayed');
257
+
258
+ $this->textbox('rss_no_results', __('Default display if no results:','yarpp'), 40, 'rss_not_templated rss_displayed');
259
+ echo "</div>";
260
+
261
$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');
262
}
263
}
324
325
echo '<label for="optin">' . __('Send YARPP settings and usage data back to YARPP.', 'yarpp') . '</label>';
326
327
+ 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>';
328
}
329
}
330
options.css CHANGED
@@ -106,6 +106,14 @@ a.yarpp_help:hover {
106
display: inline-block;
107
}
108
109
.yarpp_form_row {
110
overflow: auto;
111
}
@@ -123,7 +131,7 @@ a.yarpp_help:hover {
123
padding-bottom: 5px;
124
}
125
.yarpp_form_label {
126
- width: 200px;
127
}
128
.yarpp_form_textbox > .yarpp_form_label {
129
padding-top: 13px;
@@ -155,3 +163,15 @@ a.yarpp_help:hover {
155
max-width: 60%;
156
}
157
}
106
display: inline-block;
107
}
108
109
+ #yarpp_display_optin {
110
+ border-width: 2px;
111
+ }
112
+
113
+ .yarpp_subbox {
114
+ margin-bottom: 5px;
115
+ background: #fdfdfd;
116
+ }
117
.yarpp_form_row {
118
overflow: auto;
119
}
131
padding-bottom: 5px;
132
}
133
.yarpp_form_label {
134
+ width: 150px;
135
}
136
.yarpp_form_textbox > .yarpp_form_label {
137
padding-top: 13px;
163
max-width: 60%;
164
}
165
}
166
+
167
+ .yarpp_copy_templates_button {
168
+ float: right;
169
+ }
170
+
171
+ .template_file_wrap, .template_author_wrap, .template_description_wrap {
172
+ margin: 3px 0;
173
+ }
174
+
175
+ .template_file_wrap {
176
+ font-family: monospace;
177
+ }
options.php CHANGED
@@ -151,6 +151,8 @@ wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
151
wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
152
wp_nonce_field( 'yarpp_display_demo', 'yarpp_display_demo-nonce', false );
153
wp_nonce_field( 'yarpp_display_exclude_terms', 'yarpp_display_exclude_terms-nonce', false );
154
?>
155
<div id="poststuff" class="metabox-holder has-right-sidebar">
156
151
wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
152
wp_nonce_field( 'yarpp_display_demo', 'yarpp_display_demo-nonce', false );
153
wp_nonce_field( 'yarpp_display_exclude_terms', 'yarpp_display_exclude_terms-nonce', false );
154
+ if ( !count($yarpp->admin->get_templates()) && $yarpp->admin->can_copy_templates() )
155
+ wp_nonce_field( 'yarpp_copy_templates', 'yarpp_copy_templates-nonce', false );
156
?>
157
<div id="poststuff" class="metabox-holder has-right-sidebar">
158
readme.txt CHANGED
@@ -235,7 +235,9 @@ If you are a bilingual speaker of English and another language and an avid user
235
== Changelog ==
236
237
= 3.6 =
238
- * ...
239
* Code cleanup:
240
* Settings screen UI have been rewritten to use `div`s rather than `table`s!
241
* Inline help in settings screen now use WordPress pointers
235
== Changelog ==
236
237
= 3.6 =
238
+ * Improvements to YARPP custom template UI
239
+ * A new "copy templates" button allows one-button installation of bundled templates into the current theme, if filesystem permissions make it possible.
240
+ * 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.
241
* Code cleanup:
242
* Settings screen UI have been rewritten to use `div`s rather than `table`s!
243
* Inline help in settings screen now use WordPress pointers
yarpp-templates/yarpp-template-example.php CHANGED
@@ -1,6 +1,8 @@
1
- <?php /*
2
- Example template
3
Author: mitcho (Michael Yoshitaka Erlewine)
4
*/
5
?><h3>Related Posts</h3>
6
<?php if (have_posts()):?>
1
+ <?php
2
+ /*
3
+ Template Name: Simple
4
Author: mitcho (Michael Yoshitaka Erlewine)
5
+ Description: A simple example YARPP template.
6
*/
7
?><h3>Related Posts</h3>
8
<?php if (have_posts()):?>
yarpp-templates/yarpp-template-list.php CHANGED
@@ -1,6 +1,7 @@
1
- <?php /*
2
- List template
3
- This template returns the related posts as a comma-separated list.
4
Author: mitcho (Michael Yoshitaka Erlewine)
5
*/
6
?><h3>Related Posts</h3>
1
+ <?php
2
+ /*
3
+ Template Name: List
4
+ Description: This template returns the related posts as a comma-separated list.
5
Author: mitcho (Michael Yoshitaka Erlewine)
6
*/
7
?><h3>Related Posts</h3>
yarpp-templates/yarpp-template-photoblog.php CHANGED
@@ -1,5 +1,7 @@
1
- <?php /*
2
- Example photoblog template for use with Yet Another Photoblog
3
Author: mitcho (Michael Yoshitaka Erlewine)
4
*/ ?>
5
<h3>Related Photos</h3>
1
+ <?php
2
+ /*
3
+ Template Name: Yet Another Photoblog
4
+ Description: Requires the Yet Another Photoblog plugin
5
Author: mitcho (Michael Yoshitaka Erlewine)
6
*/ ?>
7
<h3>Related Photos</h3>
yarpp-templates/yarpp-template-random.php CHANGED
@@ -1,6 +1,7 @@
1
- <?php /*
2
- Example template: random
3
- This template gives you some random other post in case there are no related posts
4
Author: mitcho (Michael Yoshitaka Erlewine)
5
*/ ?>
6
<h3>Related Posts</h3>
1
+ <?php
2
+ /*
3
+ Template Name: Random
4
+ Description: This template gives you a random other post in case there are no related posts
5
Author: mitcho (Michael Yoshitaka Erlewine)
6
*/ ?>
7
<h3>Related Posts</h3>
yarpp-templates/yarpp-template-thumbnail.php CHANGED
@@ -1,6 +1,7 @@
1
- <?php /*
2
- Example template for use with post thumbnails
3
- Requires a theme which supports post thumbnails
4
Author: mitcho (Michael Yoshitaka Erlewine)
5
*/ ?>
6
<h3>Related Photos</h3>
1
+ <?php
2
+ /*
3
+ Template Name: Thumbnails
4
+ Description: Requires a theme which supports post thumbnails
5
Author: mitcho (Michael Yoshitaka Erlewine)
6
*/ ?>
7
<h3>Related Photos</h3>
yarpp-templates/yarpp-template-wpml.php CHANGED
@@ -1,5 +1,7 @@
1
- <?php /*
2
- Example template for use with WPML (WP Multilingual, http://wpml.org)
3
Author: mitcho (Michael Yoshitaka Erlewine)
4
*/
5
1
+ <?php
2
+ /*
3
+ Template Name: WPML
4
+ Description: An example template for use with the WPML plugin
5
Author: mitcho (Michael Yoshitaka Erlewine)
6
*/
7
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.6b1
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.6b1');
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.6b2
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.6b2');
13
define('YARPP_DIR', dirname(__FILE__));
14
define('YARPP_NO_RELATED', ':(');
15
define('YARPP_RELATED', ':)');