Version Description
Download this release
Release Info
Developer | mitchoyoshitaka |
Plugin | Yet Another Related Posts Plugin (YARPP) |
Version | 3.4b6 |
Comparing to | |
See all releases |
Code changes from version 3.4b5 to 3.4b6
- cache-postmeta.php +2 -2
- cache-tables.php +2 -2
- class-admin.php +71 -0
- class-cache.php +269 -0
- class-core.php +291 -0
- class-widget.php +97 -0
- includes.php +0 -616
- magic.php +2 -19
- options.js +23 -11
- services.php +0 -56
- yarpp-templates/yarpp-template-example.php +2 -2
- yarpp-templates/yarpp-template-list.php +2 -2
- yarpp-templates/yarpp-template-photoblog.php +2 -2
- yarpp-templates/yarpp-template-random.php +4 -4
- yarpp-templates/yarpp-template-thumbnail.php +3 -3
- yarpp-templates/yarpp-template-wpml.php +2 -2
- yarpp.php +5 -31
cache-postmeta.php
CHANGED
@@ -15,8 +15,6 @@ class YARPP_Cache_Postmeta {
|
|
15 |
|
16 |
private $yarpp_time = false;
|
17 |
public $demo_time = false;
|
18 |
-
public $score_override = false;
|
19 |
-
public $online_limit = false;
|
20 |
|
21 |
/**
|
22 |
* SETUP/STATUS
|
@@ -28,6 +26,8 @@ class YARPP_Cache_Postmeta {
|
|
28 |
add_filter('posts_fields',array(&$this,'fields_filter'));
|
29 |
add_filter('posts_request',array(&$this,'demo_request_filter'));
|
30 |
add_filter('post_limits',array(&$this,'limit_filter'));
|
|
|
|
|
31 |
}
|
32 |
|
33 |
public function is_enabled() {
|
15 |
|
16 |
private $yarpp_time = false;
|
17 |
public $demo_time = false;
|
|
|
|
|
18 |
|
19 |
/**
|
20 |
* SETUP/STATUS
|
26 |
add_filter('posts_fields',array(&$this,'fields_filter'));
|
27 |
add_filter('posts_request',array(&$this,'demo_request_filter'));
|
28 |
add_filter('post_limits',array(&$this,'limit_filter'));
|
29 |
+
// sets the score override flag.
|
30 |
+
add_action('parse_query',array(&$this,'set_score_override_flag'));
|
31 |
}
|
32 |
|
33 |
public function is_enabled() {
|
cache-tables.php
CHANGED
@@ -9,8 +9,6 @@ class YARPP_Cache_Tables extends YARPP_Cache {
|
|
9 |
public $name = "custom tables";
|
10 |
private $yarpp_time = false;
|
11 |
public $demo_time = false;
|
12 |
-
public $score_override = false; // @todo: should be private
|
13 |
-
public $online_limit = false; // @todo: should be private
|
14 |
|
15 |
/**
|
16 |
* SETUP/STATUS
|
@@ -23,6 +21,8 @@ class YARPP_Cache_Tables extends YARPP_Cache {
|
|
23 |
add_filter('posts_fields',array(&$this,'fields_filter'));
|
24 |
add_filter('posts_request',array(&$this,'demo_request_filter'));
|
25 |
add_filter('post_limits',array(&$this,'limit_filter'));
|
|
|
|
|
26 |
}
|
27 |
|
28 |
public function is_enabled() {
|
9 |
public $name = "custom tables";
|
10 |
private $yarpp_time = false;
|
11 |
public $demo_time = false;
|
|
|
|
|
12 |
|
13 |
/**
|
14 |
* SETUP/STATUS
|
21 |
add_filter('posts_fields',array(&$this,'fields_filter'));
|
22 |
add_filter('posts_request',array(&$this,'demo_request_filter'));
|
23 |
add_filter('post_limits',array(&$this,'limit_filter'));
|
24 |
+
// sets the score override flag.
|
25 |
+
add_action('parse_query',array(&$this,'set_score_override_flag'));
|
26 |
}
|
27 |
|
28 |
public function is_enabled() {
|
class-admin.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class YARPP_Admin {
|
4 |
+
public $core;
|
5 |
+
public $hook;
|
6 |
+
|
7 |
+
function __construct( &$core ) {
|
8 |
+
$this->core = &$core;
|
9 |
+
|
10 |
+
add_action( 'admin_menu', array( $this, 'register' ) );
|
11 |
+
// new in 3.3: set default meta boxes to show:
|
12 |
+
add_filter( 'default_hidden_meta_boxes', array( $this, 'default_hidden_meta_boxes' ), 10, 2 );
|
13 |
+
}
|
14 |
+
|
15 |
+
function register() {
|
16 |
+
// setup admin
|
17 |
+
$this->hook = add_options_page(__('Related Posts (YARPP)','yarpp'),__('Related Posts (YARPP)','yarpp'), 'manage_options', 'yarpp', array( $this, 'options_page' ) );
|
18 |
+
// new in 3.3: load options page sections as metaboxes
|
19 |
+
require_once('options-meta-boxes.php');
|
20 |
+
|
21 |
+
// new in 3.0.12: add settings link to the plugins page
|
22 |
+
add_filter('plugin_action_links', array( $this, 'settings_link' ), 10, 2);
|
23 |
+
|
24 |
+
// new in 3.0: add meta box
|
25 |
+
add_meta_box( 'yarpp_relatedposts', __( 'Related Posts' , 'yarpp') . ' <span class="postbox-title-action"><a href="' . esc_url( admin_url('options-general.php?page=yarpp') ) . '" class="edit-box open-box">' . __( 'Configure' ) . '</a></span>', array( $this, 'metabox' ), 'post', 'normal' );
|
26 |
+
|
27 |
+
// new in 3.3: properly enqueue scripts for admin:
|
28 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
|
29 |
+
}
|
30 |
+
|
31 |
+
// since 3.3
|
32 |
+
function enqueue() {
|
33 |
+
global $current_screen;
|
34 |
+
if (is_object($current_screen) && $current_screen->id == 'settings_page_yarpp') {
|
35 |
+
wp_enqueue_script( 'postbox' );
|
36 |
+
wp_enqueue_style( 'yarpp_options', plugins_url( 'options.css', __FILE__ ), array(), YARPP_VERSION );
|
37 |
+
wp_enqueue_script( 'yarpp_options', plugins_url( 'options.js', __FILE__ ), array('jquery'), YARPP_VERSION );
|
38 |
+
// wp_enqueue_script( 'thickbox' );
|
39 |
+
// wp_enqueue_style( 'thickbox' );
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
function settings_link($links, $file) {
|
44 |
+
$this_plugin = dirname(plugin_basename(__FILE__)) . '/yarpp.php';
|
45 |
+
if($file == $this_plugin) {
|
46 |
+
$links[] = '<a href="options-general.php?page=yarpp">' . __('Settings', 'yarpp') . '</a>';
|
47 |
+
}
|
48 |
+
return $links;
|
49 |
+
}
|
50 |
+
|
51 |
+
function options_page() {
|
52 |
+
// for proper metabox support:
|
53 |
+
require(YARPP_DIR.'/options.php');
|
54 |
+
}
|
55 |
+
|
56 |
+
function metabox() {
|
57 |
+
echo '<style>#yarpp_relatedposts h3 .postbox-title-action { right: 30px; top: 5px; position: absolute; padding: 0 }</style><div id="yarpp-related-posts">';
|
58 |
+
if ( get_the_ID() )
|
59 |
+
yarpp_related(array('post'),array('limit'=>1000),true,false,'metabox');
|
60 |
+
else
|
61 |
+
echo "<p>".__("Related entries may be displayed once you save your entry",'yarpp').".</p>";
|
62 |
+
echo '</div>';
|
63 |
+
}
|
64 |
+
|
65 |
+
// since 3.3: default metaboxes to show:
|
66 |
+
function default_hidden_meta_boxes($hidden, $screen) {
|
67 |
+
if ( 'settings_page_yarpp' == $screen->id )
|
68 |
+
$hidden = array( 'yarpp_pool', 'yarpp_relatedness' );
|
69 |
+
return $hidden;
|
70 |
+
}
|
71 |
+
}
|
class-cache.php
ADDED
@@ -0,0 +1,269 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
abstract class YARPP_Cache {
|
4 |
+
|
5 |
+
public $core;
|
6 |
+
public $score_override = false;
|
7 |
+
public $online_limit = false;
|
8 |
+
|
9 |
+
function __construct( &$core ) {
|
10 |
+
$this->core = &$core;
|
11 |
+
$this->name = __($this->name, 'yarpp');
|
12 |
+
}
|
13 |
+
|
14 |
+
// Note: return value changed in 3.4
|
15 |
+
// return YARPP_NO_RELATED | YARPP_RELATED | YARPP_DONT_RUN | false if no good input
|
16 |
+
function enforce($reference_ID, $force = false) {
|
17 |
+
if ( !$reference_ID = absint($reference_ID) )
|
18 |
+
return false;
|
19 |
+
|
20 |
+
$status = $this->is_cached($reference_ID);
|
21 |
+
$status = apply_filters( 'yarpp_cache_enforce_status', $status, $reference_ID );
|
22 |
+
|
23 |
+
// There's a stop signal:
|
24 |
+
if ( YARPP_DONT_RUN === $status )
|
25 |
+
return YARPP_DONT_RUN;
|
26 |
+
|
27 |
+
// If not cached, process now:
|
28 |
+
if ( YARPP_NOT_CACHED == $status || $force ) {
|
29 |
+
$status = $this->update($reference_ID);
|
30 |
+
// if still not cached, there's a problem, but for the time being return NO RELATED
|
31 |
+
if ( YARPP_NOT_CACHED === $status )
|
32 |
+
return YARPP_NO_RELATED;
|
33 |
+
}
|
34 |
+
|
35 |
+
// There are no related posts
|
36 |
+
if ( YARPP_NO_RELATED === $status )
|
37 |
+
return YARPP_NO_RELATED;
|
38 |
+
|
39 |
+
// There are results
|
40 |
+
return YARPP_RELATED;
|
41 |
+
}
|
42 |
+
|
43 |
+
/*
|
44 |
+
* POST STATUS INTERACTIONS
|
45 |
+
*/
|
46 |
+
|
47 |
+
function save_post($post_ID, $force=true) {
|
48 |
+
global $wpdb;
|
49 |
+
|
50 |
+
// new in 3.2: don't compute cache during import
|
51 |
+
if ( defined( 'WP_IMPORTING' ) )
|
52 |
+
return;
|
53 |
+
|
54 |
+
$sql = "select post_parent from $wpdb->posts where ID='$post_ID'";
|
55 |
+
$parent_ID = $wpdb->get_var($sql);
|
56 |
+
|
57 |
+
if ( $parent_ID != $post_ID && $parent_ID )
|
58 |
+
$post_ID = $parent_ID;
|
59 |
+
|
60 |
+
$this->enforce((int) $post_ID, $force);
|
61 |
+
}
|
62 |
+
|
63 |
+
// Clear the cache for this entry and for all posts which are "related" to it.
|
64 |
+
// New in 3.2: This is called when a post is deleted.
|
65 |
+
function delete_post($post_ID) {
|
66 |
+
// Clear the cache for this post.
|
67 |
+
$this->clear($post_ID);
|
68 |
+
|
69 |
+
// Find all "peers" which list this post as a related post.
|
70 |
+
$peers = $this->related(null, $post_ID);
|
71 |
+
// Clear the peers' caches.
|
72 |
+
$this->clear($peers);
|
73 |
+
}
|
74 |
+
|
75 |
+
// New in 3.2.1: handle various post_status transitions
|
76 |
+
function transition_post_status($new_status, $old_status, $post) {
|
77 |
+
switch ($new_status) {
|
78 |
+
case "draft":
|
79 |
+
$this->delete_post($post->ID);
|
80 |
+
break;
|
81 |
+
case "publish":
|
82 |
+
// find everything which is related to this post, and clear them, so that this
|
83 |
+
// post might show up as related to them.
|
84 |
+
$related = $this->related($post->ID, null);
|
85 |
+
$this->clear($related);
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
+
function set_score_override_flag($q) {
|
90 |
+
if ( $this->is_yarpp_time() ) {
|
91 |
+
$this->score_override = ($q->query_vars['orderby'] == 'score');
|
92 |
+
|
93 |
+
if (!empty($q->query_vars['showposts'])) {
|
94 |
+
$this->online_limit = $q->query_vars['showposts'];
|
95 |
+
} else {
|
96 |
+
$this->online_limit = false;
|
97 |
+
}
|
98 |
+
} else {
|
99 |
+
$this->score_override = false;
|
100 |
+
$this->online_limit = false;
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
/*
|
105 |
+
* KEYWORDS
|
106 |
+
*/
|
107 |
+
|
108 |
+
public function title_keywords($ID,$max = 20) {
|
109 |
+
return $this->extract_keywords(get_the_title($ID),$max);
|
110 |
+
}
|
111 |
+
|
112 |
+
public function body_keywords( $ID, $max = 20 ) {
|
113 |
+
$post = get_post( $ID );
|
114 |
+
if ( empty($post) )
|
115 |
+
return '';
|
116 |
+
$content = $this->apply_filters_if_white( 'the_content', $post->post_content );
|
117 |
+
return $this->extract_keywords( $content, $max );
|
118 |
+
}
|
119 |
+
|
120 |
+
private function extract_keywords($html, $max = 20) {
|
121 |
+
|
122 |
+
$lang = 'en_US';
|
123 |
+
if ( defined('WPLANG') ) {
|
124 |
+
$lang = substr(WPLANG, 0, 2);
|
125 |
+
switch ( $lang ) {
|
126 |
+
case 'de':
|
127 |
+
$lang = 'de_DE';
|
128 |
+
case 'it':
|
129 |
+
$lang = 'it_IT';
|
130 |
+
case 'pl':
|
131 |
+
$lang = 'pl_PL';
|
132 |
+
case 'bg':
|
133 |
+
$lang = 'bg_BG';
|
134 |
+
case 'fr':
|
135 |
+
$lang = 'fr_FR';
|
136 |
+
case 'cs':
|
137 |
+
$lang = 'cs_CZ';
|
138 |
+
case 'nl':
|
139 |
+
$lang = 'nl_NL';
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
$words_file = YARPP_DIR . '/lang/words-' . $lang . '.php';
|
144 |
+
if ( file_exists($words_file) )
|
145 |
+
include( $words_file );
|
146 |
+
if ( !isset($overusedwords) )
|
147 |
+
$overusedwords = array();
|
148 |
+
|
149 |
+
// strip tags and html entities
|
150 |
+
$text = preg_replace('/&(#x[0-9a-f]+|#[0-9]+|[a-zA-Z]+);/', '', strip_tags($html) );
|
151 |
+
|
152 |
+
// 3.2.2: ignore soft hyphens
|
153 |
+
// Requires PHP 5: http://bugs.php.net/bug.php?id=25670
|
154 |
+
$softhyphen = html_entity_decode('­',ENT_NOQUOTES,'UTF-8');
|
155 |
+
$text = str_replace($softhyphen, '', $text);
|
156 |
+
|
157 |
+
$charset = get_option('blog_charset');
|
158 |
+
if ( function_exists('mb_split') && !empty($charset) ) {
|
159 |
+
mb_regex_encoding($charset);
|
160 |
+
$wordlist = mb_split('\s*\W+\s*', mb_strtolower($text, $charset));
|
161 |
+
} else
|
162 |
+
$wordlist = preg_split('%\s*\W+\s*%', strtolower($text));
|
163 |
+
|
164 |
+
// Build an array of the unique words and number of times they occur.
|
165 |
+
$tokens = array_count_values($wordlist);
|
166 |
+
|
167 |
+
// Remove the stop words from the list.
|
168 |
+
$overusedwords = apply_filters( 'yarpp_keywords_overused_words', $overusedwords );
|
169 |
+
if ( is_array($overusedwords) ) {
|
170 |
+
foreach ($overusedwords as $word) {
|
171 |
+
unset($tokens[$word]);
|
172 |
+
}
|
173 |
+
}
|
174 |
+
// Remove words which are only a letter
|
175 |
+
$mb_strlen_exists = function_exists('mb_strlen');
|
176 |
+
foreach (array_keys($tokens) as $word) {
|
177 |
+
if ($mb_strlen_exists)
|
178 |
+
if (mb_strlen($word) < 2) unset($tokens[$word]);
|
179 |
+
else
|
180 |
+
if (strlen($word) < 2) unset($tokens[$word]);
|
181 |
+
}
|
182 |
+
|
183 |
+
arsort($tokens, SORT_NUMERIC);
|
184 |
+
|
185 |
+
$types = array_keys($tokens);
|
186 |
+
|
187 |
+
if (count($types) > $max)
|
188 |
+
$types = array_slice($types, 0, $max);
|
189 |
+
return implode(' ', $types);
|
190 |
+
}
|
191 |
+
|
192 |
+
/* new in 2.0! apply_filters_if_white (previously apply_filters_without) now has a blacklist.
|
193 |
+
* It can be modified via the yarpp_blacklist and yarpp_blackmethods filters.
|
194 |
+
*/
|
195 |
+
/* blacklisted so far:
|
196 |
+
- diggZ-Et
|
197 |
+
- reddZ-Et
|
198 |
+
- dzoneZ-Et
|
199 |
+
- WP-Syntax
|
200 |
+
- Viper's Video Quicktags
|
201 |
+
- WP-CodeBox
|
202 |
+
- WP shortcodes
|
203 |
+
- WP Greet Box
|
204 |
+
//- Tweet This - could not reproduce problem.
|
205 |
+
*/
|
206 |
+
function white( $filter ) {
|
207 |
+
static $blacklist, $blackmethods;
|
208 |
+
|
209 |
+
if ( is_null($blacklist) || is_null($blackmethods) ) {
|
210 |
+
$yarpp_blacklist = array('yarpp_default', 'diggZEt_AddBut', 'reddZEt_AddBut', 'dzoneZEt_AddBut', 'wp_syntax_before_filter', 'wp_syntax_after_filter', 'wp_codebox_before_filter', 'wp_codebox_after_filter', 'do_shortcode');//,'insert_tweet_this'
|
211 |
+
$yarpp_blackmethods = array('addinlinejs', 'replacebbcode', 'filter_content');
|
212 |
+
|
213 |
+
$blacklist = (array) apply_filters( 'yarpp_blacklist', $yarpp_blacklist );
|
214 |
+
$blackmethods = (array) apply_filters( 'yarpp_blackmethods', $yarpp_blackmethods );
|
215 |
+
}
|
216 |
+
|
217 |
+
if ( is_array($filter) && in_array( $filter[1], $blackmethods ) )
|
218 |
+
return false;
|
219 |
+
return !in_array( $filter, $blacklist );
|
220 |
+
}
|
221 |
+
|
222 |
+
/* FYI, apply_filters_if_white was used here to avoid a loop in apply_filters('the_content') > yarpp_default() > yarpp_related() > current_post_keywords() > apply_filters('the_content').*/
|
223 |
+
function apply_filters_if_white($tag, $value) {
|
224 |
+
global $wp_filter, $merged_filters, $wp_current_filter;
|
225 |
+
|
226 |
+
$args = array();
|
227 |
+
|
228 |
+
// Do 'all' actions first
|
229 |
+
if ( isset($wp_filter['all']) ) {
|
230 |
+
$wp_current_filter[] = $tag;
|
231 |
+
$args = func_get_args();
|
232 |
+
_wp_call_all_hook($args);
|
233 |
+
}
|
234 |
+
|
235 |
+
if ( !isset($wp_filter[$tag]) ) {
|
236 |
+
if ( isset($wp_filter['all']) )
|
237 |
+
array_pop($wp_current_filter);
|
238 |
+
return $value;
|
239 |
+
}
|
240 |
+
|
241 |
+
if ( !isset($wp_filter['all']) )
|
242 |
+
$wp_current_filter[] = $tag;
|
243 |
+
|
244 |
+
// Sort
|
245 |
+
if ( !isset( $merged_filters[ $tag ] ) ) {
|
246 |
+
ksort($wp_filter[$tag]);
|
247 |
+
$merged_filters[ $tag ] = true;
|
248 |
+
}
|
249 |
+
|
250 |
+
reset( $wp_filter[ $tag ] );
|
251 |
+
|
252 |
+
if ( empty($args) )
|
253 |
+
$args = func_get_args();
|
254 |
+
|
255 |
+
do {
|
256 |
+
foreach( (array) current($wp_filter[$tag]) as $the_ )
|
257 |
+
if ( !is_null($the_['function'])
|
258 |
+
and $this->white($the_['function'])){ // HACK
|
259 |
+
$args[1] = $value;
|
260 |
+
$value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
|
261 |
+
}
|
262 |
+
|
263 |
+
} while ( next($wp_filter[$tag]) !== false );
|
264 |
+
|
265 |
+
array_pop( $wp_current_filter );
|
266 |
+
|
267 |
+
return $value;
|
268 |
+
}
|
269 |
+
}
|
class-core.php
ADDED
@@ -0,0 +1,291 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// new in 3.4: put everything YARPP into an object, expected to be a singleton global $yarpp
|
4 |
+
class YARPP {
|
5 |
+
|
6 |
+
public $debug = false;
|
7 |
+
|
8 |
+
public $cache;
|
9 |
+
public $admin;
|
10 |
+
private $storage_class;
|
11 |
+
|
12 |
+
function __construct() {
|
13 |
+
// register text domain
|
14 |
+
load_plugin_textdomain( 'yarpp', false, dirname(plugin_basename(__FILE__)) . '/lang' );
|
15 |
+
|
16 |
+
// load cache object
|
17 |
+
require_once(YARPP_DIR . '/class-cache.php');
|
18 |
+
require_once(YARPP_DIR . '/cache-' . YARPP_CACHE_TYPE . '.php');
|
19 |
+
$this->storage_class = $yarpp_storage_class;
|
20 |
+
$this->cache = new $this->storage_class( $this );
|
21 |
+
|
22 |
+
register_activation_hook( __FILE__, array($this, 'activate') );
|
23 |
+
add_action( 'admin_init', array($this, 'admin_init') );
|
24 |
+
|
25 |
+
// update cache on save
|
26 |
+
add_action( 'save_post', array($this->cache, 'save_post') );
|
27 |
+
// new in 3.2: update cache on delete
|
28 |
+
add_action( 'delete_post', array($this->cache, 'delete_post') );
|
29 |
+
// new in 3.2.1: handle post_status transitions
|
30 |
+
add_action( 'transition_post_status', array($this->cache, 'transition_post_status'), 10, 3);
|
31 |
+
|
32 |
+
// automatic display hooks:
|
33 |
+
add_filter( 'the_content', array( $this, 'the_content' ), 1200 );
|
34 |
+
add_filter( 'the_content_rss', array( $this, 'the_content_rss' ), 600 );
|
35 |
+
add_filter( 'the_excerpt_rss', array( $this, 'the_excerpt_rss' ), 600 );
|
36 |
+
|
37 |
+
if ( isset($_REQUEST['yarpp_debug']) )
|
38 |
+
$yarpp->debug = true;
|
39 |
+
|
40 |
+
// new in 3.4: only load UI if we're in the admin
|
41 |
+
if ( is_admin() ) {
|
42 |
+
require_once(YARPP_DIR . '/class-admin.php');
|
43 |
+
$this->admin = new YARPP_Admin( $this );
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
function admin_init() {
|
48 |
+
// Register AJAX services
|
49 |
+
if ( defined('DOING_AJAX') && DOING_AJAX ) {
|
50 |
+
add_action( 'wp_ajax_yarpp_display_exclude_terms', array( $this, 'ajax_display_exclude_terms' ) );
|
51 |
+
add_action( 'wp_ajax_yarpp_display_demo', array( $this, 'ajax_display_demo' ) );
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
/*
|
56 |
+
* INFRASTRUCTURE
|
57 |
+
*/
|
58 |
+
|
59 |
+
function enabled() {
|
60 |
+
global $wpdb;
|
61 |
+
if ( $this->cache->is_enabled() === false )
|
62 |
+
return false;
|
63 |
+
$indexdata = $wpdb->get_results("show index from $wpdb->posts");
|
64 |
+
foreach ($indexdata as $index) {
|
65 |
+
if ($index->Key_name == 'yarpp_title')
|
66 |
+
return true;
|
67 |
+
}
|
68 |
+
return false;
|
69 |
+
}
|
70 |
+
|
71 |
+
function activate() {
|
72 |
+
global $yarpp_version, $wpdb;
|
73 |
+
|
74 |
+
$wpdb->get_results("show index from $wpdb->posts where Key_name='yarpp_title'");
|
75 |
+
if (!$wpdb->num_rows)
|
76 |
+
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title` )");
|
77 |
+
|
78 |
+
$wpdb->get_results("show index from $wpdb->posts where Key_name='yarpp_content'");
|
79 |
+
if (!$wpdb->num_rows)
|
80 |
+
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content` )");
|
81 |
+
|
82 |
+
if ( !$this->enabled() ) {
|
83 |
+
// If we are still not enabled, run the cache abstraction's setup method.
|
84 |
+
$this->cache->setup();
|
85 |
+
// If we're still not enabled, give up.
|
86 |
+
if ( !$this->enabled() )
|
87 |
+
return 0;
|
88 |
+
}
|
89 |
+
|
90 |
+
if ( !get_option('yarpp_version') ) {
|
91 |
+
add_option( 'yarpp_version', YARPP_VERSION );
|
92 |
+
$this->version_info(true);
|
93 |
+
} else {
|
94 |
+
$this->upgrade_check();
|
95 |
+
}
|
96 |
+
|
97 |
+
return 1;
|
98 |
+
}
|
99 |
+
|
100 |
+
function myisam_check() {
|
101 |
+
global $wpdb;
|
102 |
+
$tables = $wpdb->get_results("show table status like '{$wpdb->posts}'");
|
103 |
+
foreach ($tables as $table) {
|
104 |
+
if ($table->Engine == 'MyISAM') return true;
|
105 |
+
else return $table->Engine;
|
106 |
+
}
|
107 |
+
return 'UNKNOWN';
|
108 |
+
}
|
109 |
+
|
110 |
+
function upgrade_check() {
|
111 |
+
$last_version = get_option( 'yarpp_version' );
|
112 |
+
if (version_compare(YARPP_VERSION, $last_version) === 0)
|
113 |
+
return;
|
114 |
+
|
115 |
+
if ( $last_version && version_compare('3.4b2', $last_version) > 0 )
|
116 |
+
$this->upgrade_3_4b2();
|
117 |
+
if ( $last_version && version_compare('3.4b5', $last_version) > 0 )
|
118 |
+
$this->upgrade_3_4b5();
|
119 |
+
|
120 |
+
$this->cache->upgrade($last_version);
|
121 |
+
|
122 |
+
$this->version_info(true);
|
123 |
+
|
124 |
+
update_option('yarpp_version',YARPP_VERSION);
|
125 |
+
}
|
126 |
+
|
127 |
+
function upgrade_3_4b2() {
|
128 |
+
global $wpdb, $yarpp_value_options, $yarpp_binary_options;
|
129 |
+
|
130 |
+
$yarpp_options = array();
|
131 |
+
foreach ( $yarpp_value_options as $key => $default ) {
|
132 |
+
$value = get_option( "yarpp_$key", null );
|
133 |
+
if ( is_null($value) )
|
134 |
+
continue;
|
135 |
+
|
136 |
+
// value options used to be stored with a bajillion slashes...
|
137 |
+
$value = stripslashes(stripslashes($value));
|
138 |
+
// value options used to be stored with a blank space at the end... don't ask.
|
139 |
+
$value = rtrim($value, ' ');
|
140 |
+
|
141 |
+
if ( is_int($default) )
|
142 |
+
$yarpp_options[$key] = absint($value);
|
143 |
+
else
|
144 |
+
$yarpp_options[$key] = $value;
|
145 |
+
}
|
146 |
+
foreach ( $yarpp_binary_options as $key => $default ) {
|
147 |
+
$value = get_option( "yarpp_$key", null );
|
148 |
+
if ( is_null($value) )
|
149 |
+
continue;
|
150 |
+
$yarpp_options[$key] = (boolean) $value;
|
151 |
+
}
|
152 |
+
|
153 |
+
// add the options directly first, then call set_option which will ensure defaults,
|
154 |
+
// in case any new options have been added.
|
155 |
+
update_option( 'yarpp', $yarpp_options );
|
156 |
+
yarpp_set_option( $yarpp_options );
|
157 |
+
|
158 |
+
$option_keys = array_keys( $yarpp_options );
|
159 |
+
// append some keys for options which are long deprecated:
|
160 |
+
$option_keys[] = 'ad_hoc_caching';
|
161 |
+
$option_keys[] = 'excerpt_len';
|
162 |
+
$option_keys[] = 'show_score';
|
163 |
+
if ( count($option_keys) ) {
|
164 |
+
$in = "('yarpp_" . join("', 'yarpp_", $option_keys) . "')";
|
165 |
+
$wpdb->query("delete from {$wpdb->options} where option_name in {$in}");
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
function upgrade_3_4b5() {
|
170 |
+
$options = yarpp_get_option();
|
171 |
+
$options['exclude'] = array(
|
172 |
+
'post_tag' => $options['distags'],
|
173 |
+
'category' => $options['discats']
|
174 |
+
);
|
175 |
+
unset( $options['distags'] );
|
176 |
+
unset( $options['discats'] );
|
177 |
+
update_option( 'yarpp', $options );
|
178 |
+
}
|
179 |
+
|
180 |
+
/*
|
181 |
+
* DEFAULT CONTENT FILTERS
|
182 |
+
*/
|
183 |
+
|
184 |
+
function the_content($content) {
|
185 |
+
global $post;
|
186 |
+
|
187 |
+
if (is_feed())
|
188 |
+
return $this->the_content_rss($content);
|
189 |
+
|
190 |
+
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
191 |
+
if ( yarpp_get_option('cross_relate') )
|
192 |
+
$type = array('post','page');
|
193 |
+
|
194 |
+
if ( yarpp_get_option('auto_display') && is_single() )
|
195 |
+
return $content . yarpp_related($type,array(),false,false,'website');
|
196 |
+
else
|
197 |
+
return $content;
|
198 |
+
}
|
199 |
+
|
200 |
+
function the_content_rss($content) {
|
201 |
+
global $post;
|
202 |
+
|
203 |
+
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
204 |
+
if ( yarpp_get_option('cross_relate') )
|
205 |
+
$type = array('post','page');
|
206 |
+
|
207 |
+
if ( yarpp_get_option('rss_display') )
|
208 |
+
return $content . yarpp_related($type,array(),false,false,'rss');
|
209 |
+
else
|
210 |
+
return $content;
|
211 |
+
}
|
212 |
+
|
213 |
+
function the_excerpt_rss($content) {
|
214 |
+
global $post;
|
215 |
+
|
216 |
+
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
217 |
+
if ( yarpp_get_option('cross_relate') )
|
218 |
+
$type = array('post','page');
|
219 |
+
|
220 |
+
if ( yarpp_get_option('rss_excerpt_display') && yarpp_get_option('rss_display') )
|
221 |
+
return $content . clean_pre(yarpp_related($type,array(),false,false,'rss'));
|
222 |
+
else
|
223 |
+
return $content;
|
224 |
+
}
|
225 |
+
|
226 |
+
/*
|
227 |
+
* UTILS
|
228 |
+
*/
|
229 |
+
|
230 |
+
// new in 3.3: use PHP serialized format instead of JSON
|
231 |
+
function version_info( $enforce_cache = false ) {
|
232 |
+
if (false === ($result = get_transient('yarpp_version_info')) || $enforce_cache) {
|
233 |
+
$version = YARPP_VERSION;
|
234 |
+
$remote = wp_remote_post("http://mitcho.com/code/yarpp/checkversion.php?format=php&version={$version}");
|
235 |
+
|
236 |
+
if (is_wp_error($remote))
|
237 |
+
return false;
|
238 |
+
|
239 |
+
$result = unserialize($remote['body']);
|
240 |
+
set_transient('yarpp_version_info', $result, 60*60*12);
|
241 |
+
}
|
242 |
+
return $result;
|
243 |
+
}
|
244 |
+
|
245 |
+
/*
|
246 |
+
* AJAX SERVICES
|
247 |
+
*/
|
248 |
+
|
249 |
+
function ajax_display_exclude_terms() {
|
250 |
+
if ( !isset($_REQUEST['taxonomy']) )
|
251 |
+
return;
|
252 |
+
|
253 |
+
$taxonomy = (string) $_REQUEST['taxonomy'];
|
254 |
+
|
255 |
+
header("HTTP/1.1 200");
|
256 |
+
header("Content-Type: text/html; charset=UTF-8");
|
257 |
+
|
258 |
+
$exclude = yarpp_get_option('exclude');
|
259 |
+
if ( !isset($exclude[$taxonomy]) )
|
260 |
+
$exclude[$taxonomy] = array();
|
261 |
+
$terms = get_terms($taxonomy, array(
|
262 |
+
'exclude' => $exclude[$taxonomy],
|
263 |
+
'number' => 100,
|
264 |
+
'offset' => $_REQUEST['offset']
|
265 |
+
));
|
266 |
+
|
267 |
+
if ( !count($terms) ) {
|
268 |
+
echo ':('; // no more :(
|
269 |
+
exit;
|
270 |
+
}
|
271 |
+
|
272 |
+
foreach ($terms as $term) {
|
273 |
+
echo "<input type='checkbox' name='exclude[$taxonomy][$term->term_id]' value='true' /> <label>" . esc_html($term->name) . "</label> ";
|
274 |
+
//for='exclude[$taxonomy][$cat->term_id]' it's not HTML. :(
|
275 |
+
}
|
276 |
+
exit;
|
277 |
+
}
|
278 |
+
|
279 |
+
function ajax_display_demo() {
|
280 |
+
header("HTTP/1.1 200");
|
281 |
+
header("Content-Type: text/html; charset=UTF-8");
|
282 |
+
|
283 |
+
$domain = 'demo_web';
|
284 |
+
if ( isset($_REQUEST['domain']) )
|
285 |
+
$domain = $_REQUEST['domain'];
|
286 |
+
|
287 |
+
$return = yarpp_related(array('post'), array(), false, false, $domain);
|
288 |
+
echo ereg_replace("[\n\r]",'',nl2br(htmlspecialchars($return)));
|
289 |
+
exit;
|
290 |
+
}
|
291 |
+
}
|
class-widget.php
ADDED
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// vaguely based on code by MK Safi
|
4 |
+
// http://msafi.com/fix-yet-another-related-posts-plugin-yarpp-widget-and-add-it-to-the-sidebar/
|
5 |
+
class YARPP_Widget extends WP_Widget {
|
6 |
+
function YARPP_Widget() {
|
7 |
+
parent::WP_Widget(false, $name = __('Related Posts (YARPP)','yarpp'));
|
8 |
+
}
|
9 |
+
|
10 |
+
function widget($args, $instance) {
|
11 |
+
global $post;
|
12 |
+
if (!is_singular())
|
13 |
+
return;
|
14 |
+
|
15 |
+
extract($args);
|
16 |
+
|
17 |
+
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
18 |
+
if (yarpp_get_option('cross_relate'))
|
19 |
+
$type = array('post','page');
|
20 |
+
|
21 |
+
$title = apply_filters('widget_title', $instance['title']);
|
22 |
+
echo $before_widget;
|
23 |
+
if ( !$instance['use_template'] ) {
|
24 |
+
echo $before_title;
|
25 |
+
if ($title)
|
26 |
+
echo $title;
|
27 |
+
else
|
28 |
+
_e('Related Posts (YARPP)','yarpp');
|
29 |
+
echo $after_title;
|
30 |
+
}
|
31 |
+
echo yarpp_related($type,$instance,false,false,'widget');
|
32 |
+
echo $after_widget;
|
33 |
+
}
|
34 |
+
|
35 |
+
function update($new_instance, $old_instance) {
|
36 |
+
// this starts with default values.
|
37 |
+
$instance = array( 'promote_yarpp' => 0, 'use_template' => 0 );
|
38 |
+
foreach ( $instance as $field => $val ) {
|
39 |
+
if ( isset($new_instance[$field]) )
|
40 |
+
$instance[$field] = 1;
|
41 |
+
}
|
42 |
+
if ($instance['use_template']) {
|
43 |
+
$instance['template_file'] = $new_instance['template_file'];
|
44 |
+
$instance['title'] = $old_instance['title'];
|
45 |
+
} else {
|
46 |
+
$instance['template_file'] = $old_instance['template_file'];
|
47 |
+
$instance['title'] = $new_instance['title'];
|
48 |
+
}
|
49 |
+
return $instance;
|
50 |
+
}
|
51 |
+
|
52 |
+
function form($instance) {
|
53 |
+
$title = esc_attr($instance['title']);
|
54 |
+
$template_file = $instance['template_file'];
|
55 |
+
?>
|
56 |
+
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></label></p>
|
57 |
+
|
58 |
+
<?php // if there are YARPP templates installed...
|
59 |
+
|
60 |
+
$templates = glob(STYLESHEETPATH . '/yarpp-template-*.php');
|
61 |
+
if ( is_array($templates) && count($templates) ): ?>
|
62 |
+
|
63 |
+
<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['use_template'], true) ?> /> <label for="<?php echo $this->get_field_id('use_template'); ?>"><?php _e("Display using a custom template file",'yarpp');?></label></p>
|
64 |
+
<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'); ?>">
|
65 |
+
<?php foreach ($templates as $template): ?>
|
66 |
+
<option value='<?php echo htmlspecialchars(basename($template))?>'<?php echo (basename($template)==$template_file)?" selected='selected'":'';?>><?php echo htmlspecialchars(basename($template))?></option>
|
67 |
+
<?php endforeach; ?>
|
68 |
+
</select><p>
|
69 |
+
|
70 |
+
<?php endif; ?>
|
71 |
+
|
72 |
+
<p><input class="checkbox" id="<?php echo $this->get_field_id('promote_yarpp'); ?>" name="<?php echo $this->get_field_name('promote_yarpp'); ?>" type="checkbox" <?php checked($instance['images'], true) ?> /> <label for="<?php echo $this->get_field_id('promote_yarpp'); ?>"><?php _e("Help promote Yet Another Related Posts Plugin?",'yarpp'); ?></label></p>
|
73 |
+
|
74 |
+
<script type="text/javascript">
|
75 |
+
jQuery(function($) {
|
76 |
+
function ensureTemplateChoice() {
|
77 |
+
if ($('#<?php echo $this->get_field_id('use_template'); ?>').attr('checked')) {
|
78 |
+
$('#<?php echo $this->get_field_id('title'); ?>').attr('disabled',true);
|
79 |
+
$('#<?php echo $this->get_field_id('template_file_p'); ?>').show();
|
80 |
+
} else {
|
81 |
+
$('#<?php echo $this->get_field_id('title'); ?>').attr('disabled',false);
|
82 |
+
$('#<?php echo $this->get_field_id('template_file_p'); ?>').hide();
|
83 |
+
}
|
84 |
+
}
|
85 |
+
$('#<?php echo $this->get_field_id('use_template'); ?>').change(ensureTemplateChoice);
|
86 |
+
ensureTemplateChoice();
|
87 |
+
});
|
88 |
+
</script>
|
89 |
+
|
90 |
+
<?php
|
91 |
+
}
|
92 |
+
}
|
93 |
+
// new in 2.0: add as a widget
|
94 |
+
function yarpp_widget_init() {
|
95 |
+
register_widget( 'YARPP_Widget' );
|
96 |
+
}
|
97 |
+
add_action( 'widgets_init', 'yarpp_widget_init' );
|
includes.php
CHANGED
@@ -1,426 +1,5 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
// new in 3.4: put everything YARPP into an object, expected to be a singleton global $yarpp
|
4 |
-
class YARPP {
|
5 |
-
|
6 |
-
public $debug = false;
|
7 |
-
|
8 |
-
public $cache;
|
9 |
-
private $storage_class;
|
10 |
-
|
11 |
-
function __construct() {
|
12 |
-
require_once(YARPP_DIR . '/cache-' . YARPP_CACHE_TYPE . '.php');
|
13 |
-
$this->storage_class = $yarpp_storage_class;
|
14 |
-
$this->cache = new $this->storage_class( $this );
|
15 |
-
|
16 |
-
// update cache on save
|
17 |
-
add_action('save_post', array($this->cache, 'save_post') );
|
18 |
-
// new in 3.2: update cache on delete
|
19 |
-
add_action('delete_post', array($this->cache, 'delete_post') );
|
20 |
-
// new in 3.2.1: handle post_status transitions
|
21 |
-
add_action('transition_post_status', array($this->cache, 'transition_post_status'), 10, 3);
|
22 |
-
}
|
23 |
-
|
24 |
-
/*
|
25 |
-
* INFRASTRUCTURE
|
26 |
-
*/
|
27 |
-
|
28 |
-
function enabled() {
|
29 |
-
global $wpdb;
|
30 |
-
if ( $this->cache->is_enabled() === false )
|
31 |
-
return false;
|
32 |
-
$indexdata = $wpdb->get_results("show index from $wpdb->posts");
|
33 |
-
foreach ($indexdata as $index) {
|
34 |
-
if ($index->Key_name == 'yarpp_title')
|
35 |
-
return true;
|
36 |
-
}
|
37 |
-
return false;
|
38 |
-
}
|
39 |
-
|
40 |
-
function activate() {
|
41 |
-
global $yarpp_version, $wpdb;
|
42 |
-
|
43 |
-
$wpdb->get_results("show index from $wpdb->posts where Key_name='yarpp_title'");
|
44 |
-
if (!$wpdb->num_rows)
|
45 |
-
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title` )");
|
46 |
-
|
47 |
-
$wpdb->get_results("show index from $wpdb->posts where Key_name='yarpp_content'");
|
48 |
-
if (!$wpdb->num_rows)
|
49 |
-
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content` )");
|
50 |
-
|
51 |
-
if ( !$this->enabled() ) {
|
52 |
-
// If we are still not enabled, run the cache abstraction's setup method.
|
53 |
-
$this->cache->setup();
|
54 |
-
// If we're still not enabled, give up.
|
55 |
-
if ( !$this->enabled() )
|
56 |
-
return 0;
|
57 |
-
}
|
58 |
-
|
59 |
-
if ( !get_option('yarpp_version') ) {
|
60 |
-
add_option( 'yarpp_version', YARPP_VERSION );
|
61 |
-
$this->version_info(true);
|
62 |
-
} else {
|
63 |
-
$this->upgrade_check();
|
64 |
-
}
|
65 |
-
|
66 |
-
return 1;
|
67 |
-
}
|
68 |
-
|
69 |
-
function myisam_check() {
|
70 |
-
global $wpdb;
|
71 |
-
$tables = $wpdb->get_results("show table status like '{$wpdb->posts}'");
|
72 |
-
foreach ($tables as $table) {
|
73 |
-
if ($table->Engine == 'MyISAM') return true;
|
74 |
-
else return $table->Engine;
|
75 |
-
}
|
76 |
-
return 'UNKNOWN';
|
77 |
-
}
|
78 |
-
|
79 |
-
function upgrade_check() {
|
80 |
-
$last_version = get_option( 'yarpp_version' );
|
81 |
-
if (version_compare(YARPP_VERSION, $last_version) === 0)
|
82 |
-
return;
|
83 |
-
|
84 |
-
if ( $last_version && version_compare('3.4b2', $last_version) > 0 )
|
85 |
-
$this->upgrade_3_4b2();
|
86 |
-
if ( $last_version && version_compare('3.4b5', $last_version) > 0 )
|
87 |
-
$this->upgrade_3_4b5();
|
88 |
-
|
89 |
-
$this->cache->upgrade($last_version);
|
90 |
-
|
91 |
-
$this->version_info(true);
|
92 |
-
|
93 |
-
update_option('yarpp_version',YARPP_VERSION);
|
94 |
-
}
|
95 |
-
|
96 |
-
function upgrade_3_4b2() {
|
97 |
-
global $wpdb, $yarpp_value_options, $yarpp_binary_options;
|
98 |
-
|
99 |
-
$yarpp_options = array();
|
100 |
-
foreach ( $yarpp_value_options as $key => $default ) {
|
101 |
-
$value = get_option( "yarpp_$key", null );
|
102 |
-
if ( is_null($value) )
|
103 |
-
continue;
|
104 |
-
|
105 |
-
// value options used to be stored with a bajillion slashes...
|
106 |
-
$value = stripslashes(stripslashes($value));
|
107 |
-
// value options used to be stored with a blank space at the end... don't ask.
|
108 |
-
$value = rtrim($value, ' ');
|
109 |
-
|
110 |
-
if ( is_int($default) )
|
111 |
-
$yarpp_options[$key] = absint($value);
|
112 |
-
else
|
113 |
-
$yarpp_options[$key] = $value;
|
114 |
-
}
|
115 |
-
foreach ( $yarpp_binary_options as $key => $default ) {
|
116 |
-
$value = get_option( "yarpp_$key", null );
|
117 |
-
if ( is_null($value) )
|
118 |
-
continue;
|
119 |
-
$yarpp_options[$key] = (boolean) $value;
|
120 |
-
}
|
121 |
-
|
122 |
-
// add the options directly first, then call set_option which will ensure defaults,
|
123 |
-
// in case any new options have been added.
|
124 |
-
update_option( 'yarpp', $yarpp_options );
|
125 |
-
yarpp_set_option( $yarpp_options );
|
126 |
-
|
127 |
-
$option_keys = array_keys( $yarpp_options );
|
128 |
-
// append some keys for options which are long deprecated:
|
129 |
-
$option_keys[] = 'ad_hoc_caching';
|
130 |
-
$option_keys[] = 'excerpt_len';
|
131 |
-
$option_keys[] = 'show_score';
|
132 |
-
if ( count($option_keys) ) {
|
133 |
-
$in = "('yarpp_" . join("', 'yarpp_", $option_keys) . "')";
|
134 |
-
$wpdb->query("delete from {$wpdb->options} where option_name in {$in}");
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
function upgrade_3_4b5() {
|
139 |
-
$options = yarpp_get_option();
|
140 |
-
$options['exclude'] = array(
|
141 |
-
'post_tag' => $options['distags'],
|
142 |
-
'category' => $options['discats']
|
143 |
-
);
|
144 |
-
unset( $options['distags'] );
|
145 |
-
unset( $options['discats'] );
|
146 |
-
update_option( 'yarpp', $options );
|
147 |
-
}
|
148 |
-
|
149 |
-
/*
|
150 |
-
* UTILS
|
151 |
-
*/
|
152 |
-
|
153 |
-
// new in 3.3: use PHP serialized format instead of JSON
|
154 |
-
function version_info( $enforce_cache = false ) {
|
155 |
-
if (false === ($result = get_transient('yarpp_version_info')) || $enforce_cache) {
|
156 |
-
$version = YARPP_VERSION;
|
157 |
-
$remote = wp_remote_post("http://mitcho.com/code/yarpp/checkversion.php?format=php&version={$version}");
|
158 |
-
|
159 |
-
if (is_wp_error($remote))
|
160 |
-
return false;
|
161 |
-
|
162 |
-
$result = unserialize($remote['body']);
|
163 |
-
set_transient('yarpp_version_info', $result, 60*60*12);
|
164 |
-
}
|
165 |
-
return $result;
|
166 |
-
}
|
167 |
-
|
168 |
-
}
|
169 |
-
|
170 |
-
abstract class YARPP_Cache {
|
171 |
-
|
172 |
-
public $core;
|
173 |
-
|
174 |
-
function __construct( &$core ) {
|
175 |
-
$this->core = &$core;
|
176 |
-
$this->name = __($this->name, 'yarpp');
|
177 |
-
}
|
178 |
-
|
179 |
-
// Note: return value changed in 3.4
|
180 |
-
// return YARPP_NO_RELATED | YARPP_RELATED | YARPP_DONT_RUN | false if no good input
|
181 |
-
function enforce($reference_ID, $force = false) {
|
182 |
-
if ( !$reference_ID = absint($reference_ID) )
|
183 |
-
return false;
|
184 |
-
|
185 |
-
$status = $this->is_cached($reference_ID);
|
186 |
-
$status = apply_filters( 'yarpp_cache_enforce_status', $status, $reference_ID );
|
187 |
-
|
188 |
-
// There's a stop signal:
|
189 |
-
if ( YARPP_DONT_RUN === $status )
|
190 |
-
return YARPP_DONT_RUN;
|
191 |
-
|
192 |
-
// If not cached, process now:
|
193 |
-
if ( YARPP_NOT_CACHED == $status || $force ) {
|
194 |
-
$status = $this->update($reference_ID);
|
195 |
-
// if still not cached, there's a problem, but for the time being return NO RELATED
|
196 |
-
if ( YARPP_NOT_CACHED === $status )
|
197 |
-
return YARPP_NO_RELATED;
|
198 |
-
}
|
199 |
-
|
200 |
-
// There are no related posts
|
201 |
-
if ( YARPP_NO_RELATED === $status )
|
202 |
-
return YARPP_NO_RELATED;
|
203 |
-
|
204 |
-
// There are results
|
205 |
-
return YARPP_RELATED;
|
206 |
-
}
|
207 |
-
|
208 |
-
/*
|
209 |
-
* POST STATUS INTERACTIONS
|
210 |
-
*/
|
211 |
-
|
212 |
-
function save_post($post_ID, $force=true) {
|
213 |
-
global $wpdb;
|
214 |
-
|
215 |
-
// new in 3.2: don't compute cache during import
|
216 |
-
if ( defined( 'WP_IMPORTING' ) )
|
217 |
-
return;
|
218 |
-
|
219 |
-
$sql = "select post_parent from $wpdb->posts where ID='$post_ID'";
|
220 |
-
$parent_ID = $wpdb->get_var($sql);
|
221 |
-
|
222 |
-
if ( $parent_ID != $post_ID && $parent_ID )
|
223 |
-
$post_ID = $parent_ID;
|
224 |
-
|
225 |
-
$this->enforce((int) $post_ID, $force);
|
226 |
-
}
|
227 |
-
|
228 |
-
// Clear the cache for this entry and for all posts which are "related" to it.
|
229 |
-
// New in 3.2: This is called when a post is deleted.
|
230 |
-
function delete_post($post_ID) {
|
231 |
-
// Clear the cache for this post.
|
232 |
-
$this->clear($post_ID);
|
233 |
-
|
234 |
-
// Find all "peers" which list this post as a related post.
|
235 |
-
$peers = $this->related(null, $post_ID);
|
236 |
-
// Clear the peers' caches.
|
237 |
-
$this->clear($peers);
|
238 |
-
}
|
239 |
-
|
240 |
-
// New in 3.2.1: handle various post_status transitions
|
241 |
-
function transition_post_status($new_status, $old_status, $post) {
|
242 |
-
switch ($new_status) {
|
243 |
-
case "draft":
|
244 |
-
$this->delete_post($post->ID);
|
245 |
-
break;
|
246 |
-
case "publish":
|
247 |
-
// find everything which is related to this post, and clear them, so that this
|
248 |
-
// post might show up as related to them.
|
249 |
-
$related = $this->related($post->ID, null);
|
250 |
-
$this->clear($related);
|
251 |
-
}
|
252 |
-
}
|
253 |
-
|
254 |
-
/*
|
255 |
-
* KEYWORDS
|
256 |
-
*/
|
257 |
-
|
258 |
-
public function title_keywords($ID,$max = 20) {
|
259 |
-
return $this->extract_keywords(get_the_title($ID),$max);
|
260 |
-
}
|
261 |
-
|
262 |
-
public function body_keywords( $ID, $max = 20 ) {
|
263 |
-
$post = get_post( $ID );
|
264 |
-
if ( empty($post) )
|
265 |
-
return '';
|
266 |
-
$content = $this->apply_filters_if_white( 'the_content', $post->post_content );
|
267 |
-
return $this->extract_keywords( $content, $max );
|
268 |
-
}
|
269 |
-
|
270 |
-
private function extract_keywords($html, $max = 20) {
|
271 |
-
|
272 |
-
$lang = 'en_US';
|
273 |
-
if ( defined('WPLANG') ) {
|
274 |
-
$lang = substr(WPLANG, 0, 2);
|
275 |
-
switch ( $lang ) {
|
276 |
-
case 'de':
|
277 |
-
$lang = 'de_DE';
|
278 |
-
case 'it':
|
279 |
-
$lang = 'it_IT';
|
280 |
-
case 'pl':
|
281 |
-
$lang = 'pl_PL';
|
282 |
-
case 'bg':
|
283 |
-
$lang = 'bg_BG';
|
284 |
-
case 'fr':
|
285 |
-
$lang = 'fr_FR';
|
286 |
-
case 'cs':
|
287 |
-
$lang = 'cs_CZ';
|
288 |
-
case 'nl':
|
289 |
-
$lang = 'nl_NL';
|
290 |
-
}
|
291 |
-
}
|
292 |
-
|
293 |
-
$words_file = YARPP_DIR . '/lang/words-' . $lang . '.php';
|
294 |
-
if ( file_exists($words_file) )
|
295 |
-
include( $words_file );
|
296 |
-
if ( !isset($overusedwords) )
|
297 |
-
$overusedwords = array();
|
298 |
-
|
299 |
-
// strip tags and html entities
|
300 |
-
$text = preg_replace('/&(#x[0-9a-f]+|#[0-9]+|[a-zA-Z]+);/', '', strip_tags($html) );
|
301 |
-
|
302 |
-
// 3.2.2: ignore soft hyphens
|
303 |
-
// Requires PHP 5: http://bugs.php.net/bug.php?id=25670
|
304 |
-
$softhyphen = html_entity_decode('­',ENT_NOQUOTES,'UTF-8');
|
305 |
-
$text = str_replace($softhyphen, '', $text);
|
306 |
-
|
307 |
-
$charset = get_option('blog_charset');
|
308 |
-
if ( function_exists('mb_split') && !empty($charset) ) {
|
309 |
-
mb_regex_encoding($charset);
|
310 |
-
$wordlist = mb_split('\s*\W+\s*', mb_strtolower($text, $charset));
|
311 |
-
} else
|
312 |
-
$wordlist = preg_split('%\s*\W+\s*%', strtolower($text));
|
313 |
-
|
314 |
-
// Build an array of the unique words and number of times they occur.
|
315 |
-
$tokens = array_count_values($wordlist);
|
316 |
-
|
317 |
-
// Remove the stop words from the list.
|
318 |
-
$overusedwords = apply_filters( 'yarpp_keywords_overused_words', $overusedwords );
|
319 |
-
if ( is_array($overusedwords) ) {
|
320 |
-
foreach ($overusedwords as $word) {
|
321 |
-
unset($tokens[$word]);
|
322 |
-
}
|
323 |
-
}
|
324 |
-
// Remove words which are only a letter
|
325 |
-
$mb_strlen_exists = function_exists('mb_strlen');
|
326 |
-
foreach (array_keys($tokens) as $word) {
|
327 |
-
if ($mb_strlen_exists)
|
328 |
-
if (mb_strlen($word) < 2) unset($tokens[$word]);
|
329 |
-
else
|
330 |
-
if (strlen($word) < 2) unset($tokens[$word]);
|
331 |
-
}
|
332 |
-
|
333 |
-
arsort($tokens, SORT_NUMERIC);
|
334 |
-
|
335 |
-
$types = array_keys($tokens);
|
336 |
-
|
337 |
-
if (count($types) > $max)
|
338 |
-
$types = array_slice($types, 0, $max);
|
339 |
-
return implode(' ', $types);
|
340 |
-
}
|
341 |
-
|
342 |
-
/* new in 2.0! apply_filters_if_white (previously apply_filters_without) now has a blacklist.
|
343 |
-
* It can be modified via the yarpp_blacklist and yarpp_blackmethods filters.
|
344 |
-
*/
|
345 |
-
/* blacklisted so far:
|
346 |
-
- diggZ-Et
|
347 |
-
- reddZ-Et
|
348 |
-
- dzoneZ-Et
|
349 |
-
- WP-Syntax
|
350 |
-
- Viper's Video Quicktags
|
351 |
-
- WP-CodeBox
|
352 |
-
- WP shortcodes
|
353 |
-
- WP Greet Box
|
354 |
-
//- Tweet This - could not reproduce problem.
|
355 |
-
*/
|
356 |
-
function white( $filter ) {
|
357 |
-
static $blacklist, $blackmethods;
|
358 |
-
|
359 |
-
if ( is_null($blacklist) || is_null($blackmethods) ) {
|
360 |
-
$yarpp_blacklist = array('yarpp_default', 'diggZEt_AddBut', 'reddZEt_AddBut', 'dzoneZEt_AddBut', 'wp_syntax_before_filter', 'wp_syntax_after_filter', 'wp_codebox_before_filter', 'wp_codebox_after_filter', 'do_shortcode');//,'insert_tweet_this'
|
361 |
-
$yarpp_blackmethods = array('addinlinejs', 'replacebbcode', 'filter_content');
|
362 |
-
|
363 |
-
$blacklist = (array) apply_filters( 'yarpp_blacklist', $yarpp_blacklist );
|
364 |
-
$blackmethods = (array) apply_filters( 'yarpp_blackmethods', $yarpp_blackmethods );
|
365 |
-
}
|
366 |
-
|
367 |
-
if ( is_array($filter) && in_array( $filter[1], $blackmethods ) )
|
368 |
-
return false;
|
369 |
-
return !in_array( $filter, $blacklist );
|
370 |
-
}
|
371 |
-
|
372 |
-
/* FYI, apply_filters_if_white was used here to avoid a loop in apply_filters('the_content') > yarpp_default() > yarpp_related() > current_post_keywords() > apply_filters('the_content').*/
|
373 |
-
function apply_filters_if_white($tag, $value) {
|
374 |
-
global $wp_filter, $merged_filters, $wp_current_filter;
|
375 |
-
|
376 |
-
$args = array();
|
377 |
-
|
378 |
-
// Do 'all' actions first
|
379 |
-
if ( isset($wp_filter['all']) ) {
|
380 |
-
$wp_current_filter[] = $tag;
|
381 |
-
$args = func_get_args();
|
382 |
-
_wp_call_all_hook($args);
|
383 |
-
}
|
384 |
-
|
385 |
-
if ( !isset($wp_filter[$tag]) ) {
|
386 |
-
if ( isset($wp_filter['all']) )
|
387 |
-
array_pop($wp_current_filter);
|
388 |
-
return $value;
|
389 |
-
}
|
390 |
-
|
391 |
-
if ( !isset($wp_filter['all']) )
|
392 |
-
$wp_current_filter[] = $tag;
|
393 |
-
|
394 |
-
// Sort
|
395 |
-
if ( !isset( $merged_filters[ $tag ] ) ) {
|
396 |
-
ksort($wp_filter[$tag]);
|
397 |
-
$merged_filters[ $tag ] = true;
|
398 |
-
}
|
399 |
-
|
400 |
-
reset( $wp_filter[ $tag ] );
|
401 |
-
|
402 |
-
if ( empty($args) )
|
403 |
-
$args = func_get_args();
|
404 |
-
|
405 |
-
do {
|
406 |
-
foreach( (array) current($wp_filter[$tag]) as $the_ )
|
407 |
-
if ( !is_null($the_['function'])
|
408 |
-
and $this->white($the_['function'])){ // HACK
|
409 |
-
$args[1] = $value;
|
410 |
-
$value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
|
411 |
-
}
|
412 |
-
|
413 |
-
} while ( next($wp_filter[$tag]) !== false );
|
414 |
-
|
415 |
-
array_pop( $wp_current_filter );
|
416 |
-
|
417 |
-
return $value;
|
418 |
-
}
|
419 |
-
}
|
420 |
-
|
421 |
-
require_once(YARPP_DIR.'/magic.php');
|
422 |
-
require_once(YARPP_DIR.'/services.php');
|
423 |
-
|
424 |
if ( !defined('WP_CONTENT_URL') )
|
425 |
define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
|
426 |
if ( !defined('WP_CONTENT_DIR') )
|
@@ -478,181 +57,6 @@ $yarpp_clear_cache_options = array(
|
|
478 |
'show_pass_post','recent_only','threshold','title','body','categories',
|
479 |
'tags');
|
480 |
|
481 |
-
function yarpp_admin_menu() {
|
482 |
-
$hook = add_options_page(__('Related Posts (YARPP)','yarpp'),__('Related Posts (YARPP)','yarpp'), 'manage_options', 'yarpp', 'yarpp_options_page');
|
483 |
-
add_action("load-$hook",'yarpp_load_thickbox');
|
484 |
-
// new in 3.3: load options page sections as metaboxes
|
485 |
-
include('options-meta-boxes.php');
|
486 |
-
// new in 3.0.12: add settings link to the plugins page
|
487 |
-
add_filter('plugin_action_links', 'yarpp_settings_link', 10, 2);
|
488 |
-
}
|
489 |
-
|
490 |
-
// since 3.3
|
491 |
-
function yarpp_admin_enqueue() {
|
492 |
-
global $current_screen;
|
493 |
-
if (is_object($current_screen) && $current_screen->id == 'settings_page_yarpp') {
|
494 |
-
wp_enqueue_script( 'postbox' );
|
495 |
-
wp_enqueue_style( 'yarpp_options', plugins_url( 'options.css', __FILE__ ), array(), YARPP_VERSION );
|
496 |
-
wp_enqueue_script( 'yarpp_options', plugins_url( 'options.js', __FILE__ ), array('jquery'), YARPP_VERSION );
|
497 |
-
}
|
498 |
-
}
|
499 |
-
|
500 |
-
function yarpp_settings_link($links, $file) {
|
501 |
-
$this_plugin = dirname(plugin_basename(__FILE__)) . '/yarpp.php';
|
502 |
-
if($file == $this_plugin) {
|
503 |
-
$links[] = '<a href="options-general.php?page=yarpp">' . __('Settings', 'yarpp') . '</a>';
|
504 |
-
}
|
505 |
-
return $links;
|
506 |
-
}
|
507 |
-
|
508 |
-
function yarpp_load_thickbox() {
|
509 |
-
wp_enqueue_script( 'thickbox' );
|
510 |
-
wp_enqueue_style( 'thickbox' );
|
511 |
-
}
|
512 |
-
|
513 |
-
function yarpp_options_page() {
|
514 |
-
// for proper metabox support:
|
515 |
-
require(YARPP_DIR.'/options.php');
|
516 |
-
}
|
517 |
-
|
518 |
-
function widget_yarpp_init() {
|
519 |
-
register_widget( 'YARPP_Widget' );
|
520 |
-
}
|
521 |
-
|
522 |
-
// vaguely based on code by MK Safi
|
523 |
-
// http://msafi.com/fix-yet-another-related-posts-plugin-yarpp-widget-and-add-it-to-the-sidebar/
|
524 |
-
class YARPP_Widget extends WP_Widget {
|
525 |
-
function YARPP_Widget() {
|
526 |
-
parent::WP_Widget(false, $name = __('Related Posts (YARPP)','yarpp'));
|
527 |
-
}
|
528 |
-
|
529 |
-
function widget($args, $instance) {
|
530 |
-
global $post;
|
531 |
-
if (!is_singular())
|
532 |
-
return;
|
533 |
-
|
534 |
-
extract($args);
|
535 |
-
|
536 |
-
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
537 |
-
if (yarpp_get_option('cross_relate'))
|
538 |
-
$type = array('post','page');
|
539 |
-
|
540 |
-
$title = apply_filters('widget_title', $instance['title']);
|
541 |
-
echo $before_widget;
|
542 |
-
if ( !$instance['use_template'] ) {
|
543 |
-
echo $before_title;
|
544 |
-
if ($title)
|
545 |
-
echo $title;
|
546 |
-
else
|
547 |
-
_e('Related Posts (YARPP)','yarpp');
|
548 |
-
echo $after_title;
|
549 |
-
}
|
550 |
-
echo yarpp_related($type,$instance,false,false,'widget');
|
551 |
-
echo $after_widget;
|
552 |
-
}
|
553 |
-
|
554 |
-
function update($new_instance, $old_instance) {
|
555 |
-
// this starts with default values.
|
556 |
-
$instance = array( 'promote_yarpp' => 0, 'use_template' => 0 );
|
557 |
-
foreach ( $instance as $field => $val ) {
|
558 |
-
if ( isset($new_instance[$field]) )
|
559 |
-
$instance[$field] = 1;
|
560 |
-
}
|
561 |
-
if ($instance['use_template']) {
|
562 |
-
$instance['template_file'] = $new_instance['template_file'];
|
563 |
-
$instance['title'] = $old_instance['title'];
|
564 |
-
} else {
|
565 |
-
$instance['template_file'] = $old_instance['template_file'];
|
566 |
-
$instance['title'] = $new_instance['title'];
|
567 |
-
}
|
568 |
-
return $instance;
|
569 |
-
}
|
570 |
-
|
571 |
-
function form($instance) {
|
572 |
-
$title = esc_attr($instance['title']);
|
573 |
-
$template_file = $instance['template_file'];
|
574 |
-
?>
|
575 |
-
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></label></p>
|
576 |
-
|
577 |
-
<?php // if there are YARPP templates installed...
|
578 |
-
|
579 |
-
$templates = glob(STYLESHEETPATH . '/yarpp-template-*.php');
|
580 |
-
if ( is_array($templates) && count($templates) ): ?>
|
581 |
-
|
582 |
-
<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['use_template'], true) ?> /> <label for="<?php echo $this->get_field_id('use_template'); ?>"><?php _e("Display using a custom template file",'yarpp');?></label></p>
|
583 |
-
<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'); ?>">
|
584 |
-
<?php foreach ($templates as $template): ?>
|
585 |
-
<option value='<?php echo htmlspecialchars(basename($template))?>'<?php echo (basename($template)==$template_file)?" selected='selected'":'';?>><?php echo htmlspecialchars(basename($template))?></option>
|
586 |
-
<?php endforeach; ?>
|
587 |
-
</select><p>
|
588 |
-
|
589 |
-
<?php endif; ?>
|
590 |
-
|
591 |
-
<p><input class="checkbox" id="<?php echo $this->get_field_id('promote_yarpp'); ?>" name="<?php echo $this->get_field_name('promote_yarpp'); ?>" type="checkbox" <?php checked($instance['images'], true) ?> /> <label for="<?php echo $this->get_field_id('promote_yarpp'); ?>"><?php _e("Help promote Yet Another Related Posts Plugin?",'yarpp'); ?></label></p>
|
592 |
-
|
593 |
-
<script type="text/javascript">
|
594 |
-
jQuery(function() {
|
595 |
-
function ensureTemplateChoice() {
|
596 |
-
if (jQuery('#<?php echo $this->get_field_id('use_template'); ?>').attr('checked')) {
|
597 |
-
jQuery('#<?php echo $this->get_field_id('title'); ?>').attr('disabled',true);
|
598 |
-
jQuery('#<?php echo $this->get_field_id('template_file_p'); ?>').show();
|
599 |
-
} else {
|
600 |
-
jQuery('#<?php echo $this->get_field_id('title'); ?>').attr('disabled',false);
|
601 |
-
jQuery('#<?php echo $this->get_field_id('template_file_p'); ?>').hide();
|
602 |
-
}
|
603 |
-
}
|
604 |
-
jQuery('#<?php echo $this->get_field_id('use_template'); ?>').change(ensureTemplateChoice);
|
605 |
-
ensureTemplateChoice();
|
606 |
-
});
|
607 |
-
</script>
|
608 |
-
|
609 |
-
<?php
|
610 |
-
}
|
611 |
-
}
|
612 |
-
|
613 |
-
|
614 |
-
function yarpp_default($content) {
|
615 |
-
global $wpdb, $post;
|
616 |
-
|
617 |
-
if (is_feed())
|
618 |
-
return yarpp_rss($content);
|
619 |
-
|
620 |
-
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
621 |
-
if (yarpp_get_option('cross_relate'))
|
622 |
-
$type = array('post','page');
|
623 |
-
|
624 |
-
if (yarpp_get_option('auto_display') && is_single())
|
625 |
-
return $content . yarpp_related($type,array(),false,false,'website');
|
626 |
-
else
|
627 |
-
return $content;
|
628 |
-
}
|
629 |
-
|
630 |
-
function yarpp_rss($content) {
|
631 |
-
global $wpdb, $post;
|
632 |
-
|
633 |
-
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
634 |
-
if (yarpp_get_option('cross_relate'))
|
635 |
-
$type = array('post','page');
|
636 |
-
|
637 |
-
if (yarpp_get_option('rss_display'))
|
638 |
-
return $content.yarpp_related($type,array(),false,false,'rss');
|
639 |
-
else
|
640 |
-
return $content;
|
641 |
-
}
|
642 |
-
|
643 |
-
function yarpp_rss_excerpt($content) {
|
644 |
-
global $wpdb, $post;
|
645 |
-
|
646 |
-
$type = ($post->post_type == 'page' ? array('page') : array('post'));
|
647 |
-
if (yarpp_get_option('cross_relate'))
|
648 |
-
$type = array('post','page');
|
649 |
-
|
650 |
-
if (yarpp_get_option('rss_excerpt_display') && yarpp_get_option('rss_display'))
|
651 |
-
return $content.clean_pre(yarpp_related($type,array(),false,false,'rss'));
|
652 |
-
else
|
653 |
-
return $content;
|
654 |
-
}
|
655 |
-
|
656 |
// Used only in demo mode
|
657 |
if (!defined('LOREMIPSUM'))
|
658 |
define('LOREMIPSUM','Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras tincidunt justo a urna. Ut turpis. Phasellus convallis, odio sit amet cursus convallis, eros orci scelerisque velit, ut sodales neque nisl at ante. Suspendisse metus. Curabitur auctor pede quis mi. Pellentesque lorem justo, condimentum ac, dapibus sit amet, ornare et, erat. Quisque velit. Etiam sodales dui feugiat neque suscipit bibendum. Integer mattis. Nullam et ante non sem commodo malesuada. Pellentesque ultrices fermentum lectus. Maecenas hendrerit neque ac est. Fusce tortor mi, tristique sed, cursus at, pellentesque non, dui. Suspendisse potenti.');
|
@@ -693,26 +97,6 @@ function yarpp_get_option($option = null) {
|
|
693 |
return null;
|
694 |
}
|
695 |
|
696 |
-
function yarpp_add_metabox() {
|
697 |
-
add_meta_box( 'yarpp_relatedposts', __( 'Related Posts' , 'yarpp') . ' <span class="postbox-title-action"><a href="' . esc_url( admin_url('options-general.php?page=yarpp') ) . '" class="edit-box open-box">' . __( 'Configure' ) . '</a></span>', 'yarpp_metabox', 'post', 'normal' );
|
698 |
-
}
|
699 |
-
function yarpp_metabox() {
|
700 |
-
global $post;
|
701 |
-
echo '<style>#yarpp_relatedposts h3 .postbox-title-action { right: 30px; top: 5px; position: absolute; padding: 0 }</style><div id="yarpp-related-posts">';
|
702 |
-
if ( $post->ID )
|
703 |
-
yarpp_related(array('post'),array('limit'=>1000),true,false,'metabox');
|
704 |
-
else
|
705 |
-
echo "<p>".__("Related entries may be displayed once you save your entry",'yarpp').".</p>";
|
706 |
-
echo '</div>';
|
707 |
-
}
|
708 |
-
|
709 |
-
// since 3.3: default metaboxes to show:
|
710 |
-
function yarpp_default_hidden_meta_boxes($hidden, $screen) {
|
711 |
-
if ( 'settings_page_yarpp' == $screen->id )
|
712 |
-
$hidden = array( 'yarpp_pool', 'yarpp_relatedness' );
|
713 |
-
return $hidden;
|
714 |
-
}
|
715 |
-
|
716 |
// since 3.3.2: fix for WP 3.0.x
|
717 |
if ( !function_exists( 'self_admin_url' ) ) {
|
718 |
function self_admin_url($path = '', $scheme = 'admin') {
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
if ( !defined('WP_CONTENT_URL') )
|
4 |
define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
|
5 |
if ( !defined('WP_CONTENT_DIR') )
|
57 |
'show_pass_post','recent_only','threshold','title','body','categories',
|
58 |
'tags');
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
// Used only in demo mode
|
61 |
if (!defined('LOREMIPSUM'))
|
62 |
define('LOREMIPSUM','Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras tincidunt justo a urna. Ut turpis. Phasellus convallis, odio sit amet cursus convallis, eros orci scelerisque velit, ut sodales neque nisl at ante. Suspendisse metus. Curabitur auctor pede quis mi. Pellentesque lorem justo, condimentum ac, dapibus sit amet, ornare et, erat. Quisque velit. Etiam sodales dui feugiat neque suscipit bibendum. Integer mattis. Nullam et ante non sem commodo malesuada. Pellentesque ultrices fermentum lectus. Maecenas hendrerit neque ac est. Fusce tortor mi, tristique sed, cursus at, pellentesque non, dui. Suspendisse potenti.');
|
97 |
return null;
|
98 |
}
|
99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
// since 3.3.2: fix for WP 3.0.x
|
101 |
if ( !function_exists( 'self_admin_url' ) ) {
|
102 |
function self_admin_url($path = '', $scheme = 'admin') {
|
magic.php
CHANGED
@@ -1,23 +1,5 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
//=TEMPLATING/DISPLAY===========
|
4 |
-
|
5 |
-
function yarpp_set_score_override_flag($q) {
|
6 |
-
global $yarpp;
|
7 |
-
if ( $yarpp->cache->is_yarpp_time() ) {
|
8 |
-
$yarpp->cache->score_override = ($q->query_vars['orderby'] == 'score');
|
9 |
-
|
10 |
-
if (!empty($q->query_vars['showposts'])) {
|
11 |
-
$yarpp->cache->online_limit = $q->query_vars['showposts'];
|
12 |
-
} else {
|
13 |
-
$yarpp->cache->online_limit = false;
|
14 |
-
}
|
15 |
-
} else {
|
16 |
-
$yarpp->cache->score_override = false;
|
17 |
-
$yarpp->cache->online_limit = false;
|
18 |
-
}
|
19 |
-
}
|
20 |
-
|
21 |
//=CACHING===========
|
22 |
|
23 |
function yarpp_sql( $reference_ID = false ) {
|
@@ -227,6 +209,7 @@ function yarpp_related($type,$args,$echo = true,$reference_ID=false,$domain = 'w
|
|
227 |
// make sure we get the right is_single value
|
228 |
// (see http://wordpress.org/support/topic/288230)
|
229 |
$wp_query->is_single = false;
|
|
|
230 |
|
231 |
if ($domain == 'metabox') {
|
232 |
include(YARPP_DIR.'/template-metabox.php');
|
@@ -250,7 +233,7 @@ function yarpp_related($type,$args,$echo = true,$reference_ID=false,$domain = 'w
|
|
250 |
}
|
251 |
|
252 |
// restore the older wp_query.
|
253 |
-
$wp_query = $current_query; unset($current_query);
|
254 |
wp_reset_postdata();
|
255 |
$pagenow = $current_pagenow; unset($current_pagenow);
|
256 |
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
//=CACHING===========
|
4 |
|
5 |
function yarpp_sql( $reference_ID = false ) {
|
209 |
// make sure we get the right is_single value
|
210 |
// (see http://wordpress.org/support/topic/288230)
|
211 |
$wp_query->is_single = false;
|
212 |
+
$related_query = $wp_query; // backwards compatibility
|
213 |
|
214 |
if ($domain == 'metabox') {
|
215 |
include(YARPP_DIR.'/template-metabox.php');
|
233 |
}
|
234 |
|
235 |
// restore the older wp_query.
|
236 |
+
$wp_query = $current_query; unset($current_query); unset($related_query);
|
237 |
wp_reset_postdata();
|
238 |
$pagenow = $current_pagenow; unset($current_pagenow);
|
239 |
|
options.js
CHANGED
@@ -23,8 +23,28 @@ jQuery(function($) {
|
|
23 |
}
|
24 |
$('.show_excerpt,.template').click(excerpt);
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
var loaded_demo_rss = false;
|
27 |
function rss_display() {
|
|
|
|
|
28 |
if ($('.rss_display').attr('checked')) {
|
29 |
$('.rss_displayed').show();
|
30 |
if ( !loaded_demo_rss ) {
|
@@ -32,17 +52,17 @@ jQuery(function($) {
|
|
32 |
var demo_rss = $('#display_demo_rss');
|
33 |
$.ajax({type:'POST',
|
34 |
url: ajaxurl,
|
35 |
-
data:'action=
|
36 |
beforeSend:function(){demo_rss.html(loading)},
|
37 |
success:function(html){demo_rss.html('<pre>'+html+'</pre>')},
|
38 |
dataType:'html'});
|
39 |
}
|
|
|
40 |
} else {
|
41 |
$('.rss_displayed').hide();
|
42 |
}
|
43 |
-
rss_template();
|
44 |
}
|
45 |
-
$('.rss_display').click(rss_display);
|
46 |
rss_display();
|
47 |
|
48 |
function rss_template() {
|
@@ -118,12 +138,4 @@ jQuery(function($) {
|
|
118 |
}
|
119 |
$('#yarpp_pool .handlediv, #yarpp_pool-hide').click(load_disallows);
|
120 |
load_disallows();
|
121 |
-
|
122 |
-
var demo_web = $('#display_demo_web');
|
123 |
-
$.ajax({type:'POST',
|
124 |
-
url: ajaxurl,
|
125 |
-
data:'action=yarpp_display_demo_web',
|
126 |
-
beforeSend:function(){demo_web.html(loading)},
|
127 |
-
success:function(html){demo_web.html('<pre>'+html+'</pre>')},
|
128 |
-
dataType:'html'});
|
129 |
});
|
23 |
}
|
24 |
$('.show_excerpt,.template').click(excerpt);
|
25 |
|
26 |
+
var loaded_demo_web = false;
|
27 |
+
function display() {
|
28 |
+
if ( !$('#yarpp_display_web .inside').is(':visible') )
|
29 |
+
return;
|
30 |
+
if ( !loaded_demo_web ) {
|
31 |
+
loaded_demo_web = true;
|
32 |
+
var demo_web = $('#display_demo_web');
|
33 |
+
$.ajax({type:'POST',
|
34 |
+
url: ajaxurl,
|
35 |
+
data:'action=yarpp_display_demo&domain=demo_web',
|
36 |
+
beforeSend:function(){demo_web.html(loading)},
|
37 |
+
success:function(html){demo_web.html('<pre>'+html+'</pre>')},
|
38 |
+
dataType:'html'});
|
39 |
+
}
|
40 |
+
}
|
41 |
+
$('#yarpp_display_web .handlediv, #yarpp_display_web-hide').click(display);
|
42 |
+
display();
|
43 |
+
|
44 |
var loaded_demo_rss = false;
|
45 |
function rss_display() {
|
46 |
+
if ( !$('#yarpp_display_rss .inside').is(':visible') )
|
47 |
+
return;
|
48 |
if ($('.rss_display').attr('checked')) {
|
49 |
$('.rss_displayed').show();
|
50 |
if ( !loaded_demo_rss ) {
|
52 |
var demo_rss = $('#display_demo_rss');
|
53 |
$.ajax({type:'POST',
|
54 |
url: ajaxurl,
|
55 |
+
data:'action=yarpp_display_demo&domain=demo_rss',
|
56 |
beforeSend:function(){demo_rss.html(loading)},
|
57 |
success:function(html){demo_rss.html('<pre>'+html+'</pre>')},
|
58 |
dataType:'html'});
|
59 |
}
|
60 |
+
rss_template();
|
61 |
} else {
|
62 |
$('.rss_displayed').hide();
|
63 |
}
|
|
|
64 |
}
|
65 |
+
$('.rss_display, #yarpp_display_rss .handlediv, #yarpp_display_rss-hide').click(rss_display);
|
66 |
rss_display();
|
67 |
|
68 |
function rss_template() {
|
138 |
}
|
139 |
$('#yarpp_pool .handlediv, #yarpp_pool-hide').click(load_disallows);
|
140 |
load_disallows();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
});
|
services.php
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// setup the ajax action hooks
|
4 |
-
add_action('wp_ajax_yarpp_display_exclude_terms', 'yarpp_ajax_display_exclude_terms');
|
5 |
-
add_action('wp_ajax_yarpp_display_demo_web', 'yarpp_ajax_display_demo_web');
|
6 |
-
add_action('wp_ajax_yarpp_display_demo_rss', 'yarpp_ajax_display_demo_rss');
|
7 |
-
|
8 |
-
function yarpp_ajax_display_exclude_terms() {
|
9 |
-
global $wpdb;
|
10 |
-
|
11 |
-
if ( !isset($_REQUEST['taxonomy']) )
|
12 |
-
return;
|
13 |
-
|
14 |
-
$taxonomy = (string) $_REQUEST['taxonomy'];
|
15 |
-
|
16 |
-
header("HTTP/1.1 200");
|
17 |
-
header("Content-Type: text/html; charset=UTF-8");
|
18 |
-
|
19 |
-
$exclude = yarpp_get_option('exclude');
|
20 |
-
if ( !isset($exclude[$taxonomy]) )
|
21 |
-
$exclude[$taxonomy] = array();
|
22 |
-
$terms = get_terms($taxonomy, array(
|
23 |
-
'exclude' => $exclude[$taxonomy],
|
24 |
-
'number' => 100,
|
25 |
-
'offset' => $_REQUEST['offset']
|
26 |
-
));
|
27 |
-
|
28 |
-
if ( !count($terms) ) {
|
29 |
-
echo ':('; // no more :(
|
30 |
-
exit;
|
31 |
-
}
|
32 |
-
|
33 |
-
foreach ($terms as $term) {
|
34 |
-
echo "<input type='checkbox' name='exclude[$taxonomy][$term->term_id]' value='true' /> <label>" . esc_html($term->name) . "</label> ";
|
35 |
-
//for='exclude[$taxonomy][$cat->term_id]' it's not HTML. :(
|
36 |
-
}
|
37 |
-
exit;
|
38 |
-
}
|
39 |
-
|
40 |
-
function yarpp_ajax_display_demo_web() {
|
41 |
-
header("HTTP/1.1 200");
|
42 |
-
header("Content-Type: text/html; charset=UTF-8");
|
43 |
-
|
44 |
-
$return = yarpp_related(array('post'),array(),false,false,'demo_web');
|
45 |
-
echo ereg_replace("[\n\r]",'',nl2br(htmlspecialchars($return)));
|
46 |
-
exit;
|
47 |
-
}
|
48 |
-
|
49 |
-
function yarpp_ajax_display_demo_rss() {
|
50 |
-
header("HTTP/1.1 200");
|
51 |
-
header("Content-Type: text/html; charset=UTF-8");
|
52 |
-
|
53 |
-
$return = yarpp_related(array('post'),array(),false,false,'demo_rss');
|
54 |
-
echo ereg_replace("[\n\r]",'',nl2br(htmlspecialchars($return)));
|
55 |
-
exit;
|
56 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yarpp-templates/yarpp-template-example.php
CHANGED
@@ -3,9 +3,9 @@ Example template
|
|
3 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
4 |
*/
|
5 |
?><h3>Related Posts</h3>
|
6 |
-
<?php if (
|
7 |
<ol>
|
8 |
-
<?php while (
|
9 |
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a><!-- (<?php the_score(); ?>)--></li>
|
10 |
<?php endwhile; ?>
|
11 |
</ol>
|
3 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
4 |
*/
|
5 |
?><h3>Related Posts</h3>
|
6 |
+
<?php if (have_posts()):?>
|
7 |
<ol>
|
8 |
+
<?php while (have_posts()) : the_post(); ?>
|
9 |
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a><!-- (<?php the_score(); ?>)--></li>
|
10 |
<?php endwhile; ?>
|
11 |
</ol>
|
yarpp-templates/yarpp-template-list.php
CHANGED
@@ -5,9 +5,9 @@ Author: mitcho (Michael Yoshitaka Erlewine)
|
|
5 |
*/
|
6 |
?><h3>Related Posts</h3>
|
7 |
|
8 |
-
<?php if (
|
9 |
$postsArray = array();
|
10 |
-
while (
|
11 |
$postsArray[] = '<a href="'.get_permalink().'" rel="bookmark">'.get_the_title().'</a><!-- ('.get_the_score().')-->';
|
12 |
endwhile;
|
13 |
|
5 |
*/
|
6 |
?><h3>Related Posts</h3>
|
7 |
|
8 |
+
<?php if (have_posts()):
|
9 |
$postsArray = array();
|
10 |
+
while (have_posts()) : the_post();
|
11 |
$postsArray[] = '<a href="'.get_permalink().'" rel="bookmark">'.get_the_title().'</a><!-- ('.get_the_score().')-->';
|
12 |
endwhile;
|
13 |
|
yarpp-templates/yarpp-template-photoblog.php
CHANGED
@@ -3,9 +3,9 @@ Example photoblog template for use with Yet Another Photoblog
|
|
3 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
4 |
*/ ?>
|
5 |
<h3>Related Photos</h3>
|
6 |
-
<?php if (
|
7 |
<ol>
|
8 |
-
<?php while (
|
9 |
<?php if (function_exists('yapb_is_photoblog_post')): if (yapb_is_photoblog_post()):?>
|
10 |
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php yapb_get_thumbnail(); ?></a></li>
|
11 |
<?php endif; endif; ?>
|
3 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
4 |
*/ ?>
|
5 |
<h3>Related Photos</h3>
|
6 |
+
<?php if (have_posts()):?>
|
7 |
<ol>
|
8 |
+
<?php while (have_posts()) : the_post(); ?>
|
9 |
<?php if (function_exists('yapb_is_photoblog_post')): if (yapb_is_photoblog_post()):?>
|
10 |
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php yapb_get_thumbnail(); ?></a></li>
|
11 |
<?php endif; endif; ?>
|
yarpp-templates/yarpp-template-random.php
CHANGED
@@ -4,15 +4,15 @@ This template gives you some random other post in case there are no related post
|
|
4 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
5 |
*/ ?>
|
6 |
<h3>Related Posts</h3>
|
7 |
-
<?php if (
|
8 |
<ol>
|
9 |
-
<?php while (
|
10 |
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a><!-- (<?php the_score(); ?>)--></li>
|
11 |
<?php endwhile; ?>
|
12 |
</ol>
|
13 |
|
14 |
<?php else:
|
15 |
-
|
16 |
-
|
17 |
<p>No related posts were found, so here's a consolation prize: <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>.</p>
|
18 |
<?php endif; ?>
|
4 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
5 |
*/ ?>
|
6 |
<h3>Related Posts</h3>
|
7 |
+
<?php if (have_posts()):?>
|
8 |
<ol>
|
9 |
+
<?php while (have_posts()) : the_post(); ?>
|
10 |
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a><!-- (<?php the_score(); ?>)--></li>
|
11 |
<?php endwhile; ?>
|
12 |
</ol>
|
13 |
|
14 |
<?php else:
|
15 |
+
query("orderby=rand&order=asc&limit=1");
|
16 |
+
the_post();?>
|
17 |
<p>No related posts were found, so here's a consolation prize: <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>.</p>
|
18 |
<?php endif; ?>
|
yarpp-templates/yarpp-template-thumbnail.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
<?php /*
|
2 |
Example template for use with post thumbnails
|
3 |
-
Requires
|
4 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
5 |
*/ ?>
|
6 |
<h3>Related Photos</h3>
|
7 |
-
<?php if (
|
8 |
<ol>
|
9 |
-
<?php while (
|
10 |
<?php if (has_post_thumbnail()):?>
|
11 |
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_post_thumbnail(); ?></a></li>
|
12 |
<?php endif; ?>
|
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>
|
7 |
+
<?php if (have_posts()):?>
|
8 |
<ol>
|
9 |
+
<?php while (have_posts()) : the_post(); ?>
|
10 |
<?php if (has_post_thumbnail()):?>
|
11 |
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_post_thumbnail(); ?></a></li>
|
12 |
<?php endif; ?>
|
yarpp-templates/yarpp-template-wpml.php
CHANGED
@@ -9,9 +9,9 @@ if (function_exists("icl_register_string")) {
|
|
9 |
}
|
10 |
|
11 |
?><h3><?php echo (function_exists("icl_t") ? icl_t("Yet Another Related Posts Plugin","related posts header","Related Posts") : "Related Posts B") ?></h3>
|
12 |
-
<?php if (
|
13 |
<ol>
|
14 |
-
<?php while (
|
15 |
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
|
16 |
<?php endwhile; ?>
|
17 |
</ol>
|
9 |
}
|
10 |
|
11 |
?><h3><?php echo (function_exists("icl_t") ? icl_t("Yet Another Related Posts Plugin","related posts header","Related Posts") : "Related Posts B") ?></h3>
|
12 |
+
<?php if (have_posts()):?>
|
13 |
<ol>
|
14 |
+
<?php while (have_posts()) : the_post(); ?>
|
15 |
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
|
16 |
<?php endwhile; ?>
|
17 |
</ol>
|
yarpp.php
CHANGED
@@ -3,22 +3,25 @@
|
|
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. A templating feature allows customization of the display.
|
6 |
-
Version: 3.
|
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.
|
13 |
define('YARPP_DIR', dirname(__FILE__));
|
14 |
define('YARPP_NO_RELATED', ':(');
|
15 |
define('YARPP_RELATED', ':)');
|
16 |
define('YARPP_NOT_CACHED', ':/');
|
17 |
define('YARPP_DONT_RUN', 'X(');
|
18 |
|
|
|
19 |
require_once(YARPP_DIR.'/includes.php');
|
|
|
20 |
require_once(YARPP_DIR.'/related-functions.php');
|
21 |
require_once(YARPP_DIR.'/template-functions.php');
|
|
|
22 |
|
23 |
// New in 3.2: load YARPP cache engine
|
24 |
// By default, this is tables, which uses custom db tables.
|
@@ -31,38 +34,9 @@ if (!defined('YARPP_CACHE_TYPE'))
|
|
31 |
add_action( 'init', 'yarpp_init' );
|
32 |
function yarpp_init() {
|
33 |
global $yarpp;
|
34 |
-
|
35 |
-
if ( isset($_REQUEST['yarpp_debug']) )
|
36 |
-
$yarpp->debug = true;
|
37 |
-
|
38 |
-
register_activation_hook( __FILE__, 'yarpp_activate' );
|
39 |
-
|
40 |
-
// register text domain
|
41 |
-
load_plugin_textdomain( 'yarpp', false, dirname(plugin_basename(__FILE__)) . '/lang' );
|
42 |
-
|
43 |
-
// setup admin
|
44 |
-
add_action('admin_menu','yarpp_admin_menu');
|
45 |
-
// new in 3.3: properly enqueue scripts for admin:
|
46 |
-
add_action( 'admin_enqueue_scripts', 'yarpp_admin_enqueue' );
|
47 |
-
// new in 3.3: set default meta boxes to show:
|
48 |
-
add_filter( 'default_hidden_meta_boxes', 'yarpp_default_hidden_meta_boxes', 10, 2 );
|
49 |
-
|
50 |
-
// automatic display hooks:
|
51 |
-
add_filter('the_content','yarpp_default',1200);
|
52 |
-
add_filter('the_content_rss','yarpp_rss',600);
|
53 |
-
add_filter('the_excerpt_rss','yarpp_rss_excerpt',600);
|
54 |
-
|
55 |
-
// new in 3.0: add meta box
|
56 |
-
add_action( 'admin_menu', 'yarpp_add_metabox');
|
57 |
-
|
58 |
-
// sets the score override flag.
|
59 |
-
add_action('parse_query','yarpp_set_score_override_flag');
|
60 |
-
|
61 |
$yarpp = new YARPP;
|
62 |
|
63 |
// new in 3.3: include BlogGlue meta box
|
64 |
if ( file_exists( YARPP_DIR . '/blogglue.php' ) )
|
65 |
include_once( YARPP_DIR . '/blogglue.php' );
|
66 |
}
|
67 |
-
// new in 2.0: add as a widget
|
68 |
-
add_action('widgets_init', 'widget_yarpp_init');
|
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. A templating feature allows customization of the display.
|
6 |
+
Version: 3.4b6
|
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.4b6');
|
13 |
define('YARPP_DIR', dirname(__FILE__));
|
14 |
define('YARPP_NO_RELATED', ':(');
|
15 |
define('YARPP_RELATED', ':)');
|
16 |
define('YARPP_NOT_CACHED', ':/');
|
17 |
define('YARPP_DONT_RUN', 'X(');
|
18 |
|
19 |
+
require_once(YARPP_DIR.'/class-core.php');
|
20 |
require_once(YARPP_DIR.'/includes.php');
|
21 |
+
require_once(YARPP_DIR.'/magic.php');
|
22 |
require_once(YARPP_DIR.'/related-functions.php');
|
23 |
require_once(YARPP_DIR.'/template-functions.php');
|
24 |
+
require_once(YARPP_DIR.'/class-widget.php');
|
25 |
|
26 |
// New in 3.2: load YARPP cache engine
|
27 |
// By default, this is tables, which uses custom db tables.
|
34 |
add_action( 'init', 'yarpp_init' );
|
35 |
function yarpp_init() {
|
36 |
global $yarpp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
$yarpp = new YARPP;
|
38 |
|
39 |
// new in 3.3: include BlogGlue meta box
|
40 |
if ( file_exists( YARPP_DIR . '/blogglue.php' ) )
|
41 |
include_once( YARPP_DIR . '/blogglue.php' );
|
42 |
}
|
|
|
|