Related Posts for WordPress - Version 1.1.0

Version Description

  • August 11, 2014 =
  • Added option screen.
  • Added to option to automatically link related posts on new posts, enabled by default.
  • Added 'rp4wp_ignored_words' filter.
  • Added 'rp4wp_thumbnail_size' filter.
  • Added missing ABSPATH checks.
Download this release

Release Info

Developer barrykooij
Plugin Icon 128x128 Related Posts for WordPress
Version 1.1.0
Comparing to
See all releases

Code changes from version 1.0.0 to 1.1.0

assets/css/install.css CHANGED
@@ -1,7 +1,3 @@
1
- .install-steps {
2
-
3
- }
4
-
5
  .install-steps li {
6
  width: 33%;
7
  padding: 10px 15px;
 
 
 
 
1
  .install-steps li {
2
  width: 33%;
3
  padding: 10px 15px;
assets/css/settings.css ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .rp4wp-content {
2
+ width: 65%;
3
+ float: left;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ .rp4wp-sidebar {
8
+ width: 33%;
9
+ margin-left: 2%;
10
+ padding: 0 0 0 2%;
11
+ border-left: 1px solid #ccc;
12
+ float: left;
13
+ box-sizing: border-box;
14
+ }
15
+
16
+ .rp4wp-box {
17
+ margin-bottom: 20px;
18
+ }
19
+
20
+ .rp4wp-sidebar-header {
21
+ line-height: 0;
22
+ border-bottom: 2px solid #005592;
23
+ }
24
+
25
+ .rp4wp-description {
26
+ display: block;
27
+ margin: 5px 0;
28
+ line-height: 1.4em;
29
+ color: #666;
30
+ font-style: italic;
31
+ }
classes/class-cap-manager.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 
 
4
 
5
  class RP4WP_Cap_Manager {
6
 
@@ -14,7 +16,8 @@ class RP4WP_Cap_Manager {
14
  public static function get_capability( $post_id ) {
15
  $post_type = ( isset( $post_id ) ) ? get_post_type( $post_id ) : 'post';
16
  $post_type_obj = get_post_type_object( $post_type );
17
- return ( ( null != $post_type_obj) ? $post_type_obj->cap->edit_posts : 'edit_posts' );
 
18
  }
19
 
20
  }
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
 
7
  class RP4WP_Cap_Manager {
8
 
16
  public static function get_capability( $post_id ) {
17
  $post_type = ( isset( $post_id ) ) ? get_post_type( $post_id ) : 'post';
18
  $post_type_obj = get_post_type_object( $post_type );
19
+
20
+ return ( ( null != $post_type_obj ) ? $post_type_obj->cap->edit_posts : 'edit_posts' );
21
  }
22
 
23
  }
classes/class-class-manager.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 
 
4
 
5
  class RP4WP_Class_Manager {
6
 
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
 
7
  class RP4WP_Class_Manager {
8
 
classes/class-constants.php CHANGED
@@ -6,14 +6,16 @@ if ( !defined( 'ABSPATH' ) ) {
6
 
7
  abstract class RP4WP_Constants {
8
 
9
- // const LINK_TITLE = 'rp4wp_link';
10
  const LINK_PT = 'rp4wp_link';
11
 
12
- // Post meta
13
  const PM_PARENT = 'rp4wp_parent';
14
  const PM_CHILD = 'rp4wp_child';
15
- const PM_CACHED = 'rp4wp_cached';
16
- const PM_AUTO_LINKED = 'rp4wp_auto_linked';
 
 
17
 
18
  // Options
19
  const OPTION_DO_INSTALL = 'rp4wp_do_install';
6
 
7
  abstract class RP4WP_Constants {
8
 
9
+ // Link title
10
  const LINK_PT = 'rp4wp_link';
11
 
12
+ // Linked meta
13
  const PM_PARENT = 'rp4wp_parent';
14
  const PM_CHILD = 'rp4wp_child';
15
+
16
+ // Post meta
17
+ const PM_CACHED = 'rp4wp_cached'; // Posts that words are saved of
18
+ const PM_POST_AUTO_LINKED = 'rp4wp_auto_linked'; // Posts that have automatically linked posts
19
 
20
  // Options
21
  const OPTION_DO_INSTALL = 'rp4wp_do_install';
classes/class-installer.php CHANGED
@@ -1,5 +1,9 @@
1
  <?php
2
 
 
 
 
 
3
  class RP4WP_Installer {
4
 
5
  /**
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
  class RP4WP_Installer {
8
 
9
  /**
classes/class-manager-hook.php CHANGED
@@ -1,13 +1,15 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 
 
4
 
5
  class RP4WP_Manager_Hook {
6
 
7
  private $hook_dir;
8
  private static $hooks;
9
 
10
- public function __construct( $hook_dir ) {
11
  $this->hook_dir = $hook_dir;
12
  }
13
 
@@ -23,7 +25,7 @@ class RP4WP_Manager_Hook {
23
  foreach ( new DirectoryIterator( $this->hook_dir ) as $file ) {
24
  $file_name = $file->getFileName();
25
 
26
- if ( ! $file->isDir() && ( strpos( $file->getFileName(), '.' ) !== 0 ) ) {
27
 
28
  $class = RP4WP_Class_Manager::format_class_name( $file->getFileName() );
29
  if ( 'RP4WP_Hook' != $class ) {
@@ -47,6 +49,7 @@ class RP4WP_Manager_Hook {
47
  if ( isset( self::$hooks[$class_name] ) ) {
48
  return self::$hooks[$class_name];
49
  }
 
50
  return null;
51
  }
52
 
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
 
7
  class RP4WP_Manager_Hook {
8
 
9
  private $hook_dir;
10
  private static $hooks;
11
 
12
+ public function __construct( $hook_dir ) {
13
  $this->hook_dir = $hook_dir;
14
  }
15
 
25
  foreach ( new DirectoryIterator( $this->hook_dir ) as $file ) {
26
  $file_name = $file->getFileName();
27
 
28
+ if ( !$file->isDir() && ( strpos( $file->getFileName(), '.' ) !== 0 ) ) {
29
 
30
  $class = RP4WP_Class_Manager::format_class_name( $file->getFileName() );
31
  if ( 'RP4WP_Hook' != $class ) {
49
  if ( isset( self::$hooks[$class_name] ) ) {
50
  return self::$hooks[$class_name];
51
  }
52
+
53
  return null;
54
  }
55
 
classes/class-post-link-manager.php CHANGED
@@ -273,61 +273,4 @@ class RP4WP_Post_Link_Manager {
273
  endwhile;
274
  }
275
 
276
- /**
277
- * Generate the children list
278
- *
279
- * @param $parent
280
- * @param $link
281
- * @param $excerpt
282
- * @param string $header_tag
283
- *
284
- * @return string
285
- */
286
- public function generate_children_list( $parent, $link, $excerpt, $header_tag = 'b' ) {
287
-
288
- // Make the header tag filterable
289
- $header_tag = apply_filters( 'pc_children_list_header_tag', $header_tag );
290
-
291
-
292
- // Get the children
293
- $children = $this->get_children( $parent );
294
-
295
-
296
- $return = "";
297
-
298
- if ( count( $children ) > 0 ) {
299
- $return .= "<div class='rp4wp-related-posts'>\n";
300
-
301
- $return .= "<ul>\n";
302
- foreach ( $children as $child ) {
303
-
304
- $return .= "<li class='rp4wp-post-{$child->ID}'>";
305
- $return .= "<{$header_tag}>";
306
- if ( $link == 'true' ) {
307
- $return .= "<a href='" . get_permalink( $child->ID ) . "'>";
308
- }
309
- $return .= $child->post_title;
310
- if ( $link == 'true' ) {
311
- $return .= "</a>";
312
- }
313
- $return .= "</{$header_tag}>";
314
-
315
- // Excerpt
316
- if ( $excerpt == 'true' ) {
317
- $the_excerpt = !empty( $child->post_excerpt ) ? $child->post_excerpt : $child->post_content;
318
- if ( $the_excerpt != '' ) {
319
- $return .= "<p>{$the_excerpt}</p>";
320
- }
321
- }
322
-
323
- $return .= "</li>\n";
324
- }
325
- $return .= "</ul>\n";
326
-
327
- $return .= "</div>\n";
328
- }
329
-
330
- return $return;
331
- }
332
-
333
  }
273
  endwhile;
274
  }
275
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  }
classes/class-related-post-manager.php CHANGED
@@ -1,5 +1,9 @@
1
  <?php
2
 
 
 
 
 
3
  class RP4WP_Related_Post_Manager {
4
 
5
  /**
@@ -67,7 +71,7 @@ class RP4WP_Related_Post_Manager {
67
  'post_status' => 'publish',
68
  'meta_query' => array(
69
  array(
70
- 'key' => RP4WP_Constants::PM_AUTO_LINKED,
71
  'compare' => 'NOT EXISTS',
72
  'value' => ''
73
  ),
@@ -95,7 +99,7 @@ class RP4WP_Related_Post_Manager {
95
  }
96
  }
97
 
98
- update_post_meta( $post_id, RP4WP_Constants::PM_AUTO_LINKED, 1);
99
 
100
  return true;
101
  }
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
  class RP4WP_Related_Post_Manager {
8
 
9
  /**
71
  'post_status' => 'publish',
72
  'meta_query' => array(
73
  array(
74
+ 'key' => RP4WP_Constants::PM_POST_AUTO_LINKED,
75
  'compare' => 'NOT EXISTS',
76
  'value' => ''
77
  ),
99
  }
100
  }
101
 
102
+ update_post_meta( $post_id, RP4WP_Constants::PM_POST_AUTO_LINKED, 1 );
103
 
104
  return true;
105
  }
classes/class-related-word-manager.php CHANGED
@@ -92,7 +92,7 @@ class RP4WP_Related_Word_Manager {
92
  }
93
 
94
  // Words to ignore
95
- return apply_filters( 'pc_ignored_words', $ignored_words );
96
  }
97
 
98
  /**
92
  }
93
 
94
  // Words to ignore
95
+ return apply_filters( 'rp4wp_ignored_words', $ignored_words );
96
  }
97
 
98
  /**
classes/class-settings.php ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
+ class RP4WP_Settings {
8
+
9
+ const PREFIX = 'rp4wp_';
10
+
11
+ const PAGE = 'rp4wp';
12
+
13
+ private $sections;
14
+ private $defaults;
15
+
16
+ /**
17
+ * Constructor
18
+ */
19
+ public function __construct() {
20
+
21
+ // The fields
22
+ $this->sections = array(
23
+ self::PREFIX . 'automatic_linking' => array(
24
+ 'id' => 'automatic_linking',
25
+ 'label' => __( 'Automatic post linking', 'related-posts-for-wp' ),
26
+ 'description' => __( 'This is the automatic post link section.', 'related-posts-for-wp' ),
27
+ 'fields' => array(
28
+ array(
29
+ 'id' => 'automatic_linking',
30
+ 'label' => __( 'Enable', 'related-posts-for-wp' ),
31
+ 'description' => __( 'Checking this will enable automatically linking posts to new posts', 'related-posts-for-wp' ),
32
+ 'type' => 'checkbox',
33
+ 'default' => 1,
34
+ ),
35
+ array(
36
+ 'id' => 'automatic_linking_post_amount',
37
+ 'label' => __( 'Amount of Posts', 'related-posts-for-wp' ),
38
+ 'description' => __( 'The amount of automatically linked post', 'related-posts-for-wp' ),
39
+ 'type' => 'text',
40
+ 'default' => '3',
41
+ )
42
+ ) )
43
+ );
44
+
45
+ // Set defaults
46
+ foreach ( $this->sections as $section ) {
47
+ foreach ( $section['fields'] as $field ) {
48
+ $this->defaults[$field['id']] = $field['default'];
49
+ }
50
+ }
51
+
52
+ // Setup settings
53
+ add_action( 'admin_init', array( $this, 'setup' ) );
54
+
55
+ }
56
+
57
+ /**
58
+ * Setup the settings
59
+ *
60
+ * @since 1.1.0
61
+ * @access public
62
+ */
63
+ public function setup() {
64
+ if ( count( $this->sections ) > 0 ) {
65
+ foreach ( $this->sections as $section ) {
66
+
67
+ // Add the section
68
+ add_settings_section(
69
+ self::PREFIX . $section['id'],
70
+ $section['label'],
71
+ array( $this, 'section_intro' ),
72
+ self::PAGE
73
+ );
74
+
75
+ // Check & Loop
76
+ if ( count( $section['fields'] ) > 0 ) {
77
+ foreach ( $section['fields'] as $field ) {
78
+
79
+ // Add section
80
+ add_settings_field(
81
+ self::PREFIX . $field['id'],
82
+ $field['label'],
83
+ array( $this, 'do_field' ),
84
+ self::PAGE,
85
+ self::PREFIX . $section['id'],
86
+ $field
87
+ );
88
+
89
+ }
90
+ }
91
+
92
+ }
93
+
94
+
95
+ // Register section setting
96
+ register_setting( self::PAGE, self::PAGE, array( $this, 'sanitize_option' ) );
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Method that is called when adding a section
102
+ *
103
+ * @param $section
104
+ *
105
+ * @since 1.1.0
106
+ * @access public
107
+ */
108
+ public function section_intro( $section ) {
109
+ echo '<p>' . $this->sections[$section['id']]['description'] . '</p>' . PHP_EOL;
110
+ }
111
+
112
+ /**
113
+ * Method that outputs the correct field
114
+ *
115
+ * @param $field
116
+ *
117
+ * @since 1.1.0
118
+ * @access public
119
+ */
120
+ public function do_field( $field ) {
121
+
122
+ // For now we just do a simple switch here, make this more OOP in future version
123
+ switch ( $field['type'] ) {
124
+ case 'checkbox':
125
+ echo '<input type="checkbox" name="' . self::PAGE . '[' . $field['id'] . ']' . '" id="' . $field['id'] . '" value="1" ' . checked( 1, $this->get_option( $field['id'] ), false ) . ' />';
126
+ break;
127
+ case 'text':
128
+ echo '<input type="text" name="' . self::PAGE . '[' . $field['id'] . ']' . '" id="' . $field['id'] . '" value="' . $this->get_option( $field['id'] ) . '" />';
129
+ break;
130
+ }
131
+
132
+ // Description
133
+ if ( isset( $field['description'] ) && '' != $field['description'] ) {
134
+ echo '<label class="rp4wp-description" for="' . $field['id'] . '">' . $field['description'] . '</label>';
135
+ }
136
+
137
+ // End of line
138
+ echo PHP_EOL;
139
+
140
+ }
141
+
142
+ /**
143
+ * Sanitize the option value
144
+ *
145
+ * @param array $post_data
146
+ *
147
+ * @since 1.1.0
148
+ * @access public
149
+ *
150
+ * @return array
151
+ */
152
+ public function sanitize_option( $post_data ) {
153
+
154
+ // Unset automatic_linking if not post
155
+ if ( !isset( $post_data['automatic_linking'] ) ) {
156
+ $post_data['automatic_linking'] = 0;
157
+ }
158
+
159
+ // automatic_linking must be an integer
160
+ $post_data['automatic_linking'] = intval($post_data['automatic_linking']);
161
+
162
+ // automatic_linking_post_amount must be an integer
163
+ $post_data['automatic_linking_post_amount'] = intval($post_data['automatic_linking_post_amount']);
164
+
165
+ return $post_data;
166
+
167
+ }
168
+
169
+ /**
170
+ * Get the plugin options
171
+ *
172
+ * @since 1.1.0
173
+ * @access public
174
+ *
175
+ * @return mixed|void
176
+ */
177
+ public function get_options() {
178
+ return apply_filters( 'rp4wp_options', wp_parse_args( get_option( self::PAGE, array() ), $this->defaults ) );
179
+ }
180
+
181
+ /**
182
+ * Return a single option
183
+ *
184
+ * @param $option
185
+ *
186
+ * @since 1.0.0
187
+ * @access public
188
+ *
189
+ * @return mixed|bool
190
+ */
191
+ public function get_option( $option ) {
192
+ $options = $this->get_options();
193
+
194
+ return isset( $options[$option] ) ? $options[$option] : false;
195
+ }
196
+
197
+ }
classes/filters/class-filter-after-post.php CHANGED
@@ -43,7 +43,7 @@ class RP4WP_Filter_After_Post extends RP4WP_Filter {
43
  *
44
  * @api String $thumbnail_size The current/default thumbnail size.
45
  */
46
- $thumb_size = apply_filters( 'pc_apdc_thumbnail_size', 'post-thumbnail' );
47
 
48
  $content .= "<div class='rp4wp-related-post-image'>" . PHP_EOL;
49
  $content .= "<a href='" . get_permalink( $pc_post->ID ) . "'>";
43
  *
44
  * @api String $thumbnail_size The current/default thumbnail size.
45
  */
46
+ $thumb_size = apply_filters( 'rp4wp_thumbnail_size', 'post-thumbnail' );
47
 
48
  $content .= "<div class='rp4wp-related-post-image'>" . PHP_EOL;
49
  $content .= "<a href='" . get_permalink( $pc_post->ID ) . "'>";
classes/filters/class-filter.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) {
4
  exit;
5
  } // Exit if accessed directly
6
 
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
  exit;
5
  } // Exit if accessed directly
6
 
classes/hooks/class-hook-ajax-install-link-posts.php CHANGED
@@ -15,7 +15,7 @@ class RP4WP_Hook_Ajax_Install_Link_Posts extends RP4WP_Hook {
15
  // Related Post Manager object
16
  $related_post_manager = new RP4WP_Related_Post_Manager();
17
 
18
- // Link 200 posts
19
  if ( true === $related_post_manager->link_related_posts( $rel_amount, 5 ) ) {
20
 
21
  // Check if we're done
15
  // Related Post Manager object
16
  $related_post_manager = new RP4WP_Related_Post_Manager();
17
 
18
+ // Link 5 posts
19
  if ( true === $related_post_manager->link_related_posts( $rel_amount, 5 ) ) {
20
 
21
  // Check if we're done
classes/hooks/class-hook-page-install.php CHANGED
@@ -14,6 +14,12 @@ class RP4WP_Hook_Page_Install extends RP4WP_Hook {
14
  add_action( 'load-' . $menu_hook, array( $this, 'enqueue_install_assets' ) );
15
  }
16
 
 
 
 
 
 
 
17
  public function enqueue_install_assets() {
18
  global $wp_scripts;
19
  wp_enqueue_style( 'rp4wp-install-css', plugins_url( '/assets/css/install.css', RP4WP::get_plugin_file() ) );
@@ -74,7 +80,7 @@ class RP4WP_Hook_Page_Install extends RP4WP_Hook {
74
  <p style="font-weight: bold;">Do NOT close this window if you click the "Link now" button, wait for this process to finish and this wizard to take you to the next step.</p>
75
  <br class="clear" />
76
  <p class="rp4wp-install-link-box">
77
- <label for="rp4wp_related_posts_amount">Amount of related posts per post:</label><input class="form-input-tip" type="text" id="rp4wp_related_posts_amount" value="5" />
78
  <a href="javascript:;" class="button button-primary button-large rp4wp-link-now-btn" id="rp4wp-link-now">Link now</a>
79
  <a href="<?php echo admin_url(); ?>?page=rp4wp_install&step=3" class="button">Skip linking</a>
80
  </p>
14
  add_action( 'load-' . $menu_hook, array( $this, 'enqueue_install_assets' ) );
15
  }
16
 
17
+ /**
18
+ * Enqueue install assets
19
+ *
20
+ * @since 1.0.0
21
+ * @access public
22
+ */
23
  public function enqueue_install_assets() {
24
  global $wp_scripts;
25
  wp_enqueue_style( 'rp4wp-install-css', plugins_url( '/assets/css/install.css', RP4WP::get_plugin_file() ) );
80
  <p style="font-weight: bold;">Do NOT close this window if you click the "Link now" button, wait for this process to finish and this wizard to take you to the next step.</p>
81
  <br class="clear" />
82
  <p class="rp4wp-install-link-box">
83
+ <label for="rp4wp_related_posts_amount">Amount of related posts per post:</label><input class="form-input-tip" type="text" id="rp4wp_related_posts_amount" value="3" />
84
  <a href="javascript:;" class="button button-primary button-large rp4wp-link-now-btn" id="rp4wp-link-now">Link now</a>
85
  <a href="<?php echo admin_url(); ?>?page=rp4wp_install&step=3" class="button">Skip linking</a>
86
  </p>
classes/hooks/class-hook-post-type.php CHANGED
@@ -1,5 +1,9 @@
1
  <?php
2
 
 
 
 
 
3
  class RP4WP_Hook_Post_Type extends RP4WP_Hook {
4
  protected $tag = 'init';
5
 
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
  class RP4WP_Hook_Post_Type extends RP4WP_Hook {
8
  protected $tag = 'init';
9
 
classes/hooks/class-hook-related-auto-link.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
+ class RP4WP_Hook_Related_Auto_Link extends RP4WP_Hook {
8
+ protected $tag = 'save_post';
9
+ protected $args = 2;
10
+ protected $priority = 11;
11
+
12
+ public function run( $post_id, $post ) {
13
+
14
+ // verify this is not an auto save routine.
15
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
16
+ return;
17
+ }
18
+
19
+ // Only count on post type 'post'
20
+ if ( 'post' != $post->post_type ) {
21
+ return;
22
+ }
23
+
24
+ // Check permission
25
+ if ( !current_user_can( 'edit_post', $post_id ) ) {
26
+ return;
27
+ }
28
+
29
+ // Post status must be publish
30
+ if ( 'publish' != $post->post_status ) {
31
+ return;
32
+ }
33
+
34
+ // Is automatic linking enabled?
35
+ if( 1 != RP4WP::get()->settings->get_option( 'automatic_linking' ) ) {
36
+ return;
37
+ }
38
+
39
+ // Check if the current post is already auto linked
40
+ if ( 1 != get_post_meta( $post_id, RP4WP_Constants::PM_POST_AUTO_LINKED, true ) ) {
41
+
42
+ // Get automatic linking post amount
43
+ $automatic_linking_post_amount = RP4WP::get()->settings->get_option( 'automatic_linking_post_amount' );
44
+
45
+ // Related Posts Manager
46
+ $related_post_manager = new RP4WP_Related_Post_Manager();
47
+
48
+ // Link related posts
49
+ $related_post_manager->link_related_post( $post_id, $automatic_linking_post_amount );
50
+
51
+ // Set the auto linked meta
52
+ update_post_meta( $post_id, RP4WP_Constants::PM_POST_AUTO_LINKED, 1 );
53
+ }
54
+
55
+ }
56
+ }
classes/hooks/class-hook-related-save-words.php CHANGED
@@ -25,6 +25,11 @@ class RP4WP_Hook_Related_Save_Words extends RP4WP_Hook {
25
  return;
26
  }
27
 
 
 
 
 
 
28
  // Save Words
29
  $related_word_manager = new RP4WP_Related_Word_Manager();
30
  $related_word_manager->save_words_of_post( $post_id );
25
  return;
26
  }
27
 
28
+ // Post status must be publish
29
+ if ( 'publish' != $post->post_status ) {
30
+ return;
31
+ }
32
+
33
  // Save Words
34
  $related_word_manager = new RP4WP_Related_Word_Manager();
35
  $related_word_manager->save_words_of_post( $post_id );
classes/hooks/class-hook-settings-page.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
+
7
+ class RP4WP_Hook_Settings_Page extends RP4WP_Hook {
8
+ protected $tag = 'admin_menu';
9
+
10
+ /**
11
+ * Hook callback, add the sub menu page
12
+ *
13
+ * @since 1.1.0
14
+ * @access public
15
+ */
16
+ public function run() {
17
+ $menu_hook = add_submenu_page( 'options-general.php', __( 'Related Posts', 'related-posts-for-wp' ), __( 'Related Posts', 'related-posts-for-wp' ), 'manage_options', 'rp4wp', array(
18
+ $this,
19
+ 'screen'
20
+ ) );
21
+
22
+ add_action( 'load-' . $menu_hook, array( $this, 'enqueue_assets' ) );
23
+ }
24
+
25
+ /**
26
+ * Enqueue settings page assets
27
+ *
28
+ * @since 1.0.0
29
+ * @access public
30
+ */
31
+ public function enqueue_assets() {
32
+ wp_enqueue_style( 'rp4wp-settings-css', plugins_url( '/assets/css/settings.css', RP4WP::get_plugin_file() ) );
33
+ }
34
+
35
+ /**
36
+ * The sidebar
37
+ *
38
+ * @since 1.0.0
39
+ * @access private
40
+ */
41
+ private function sidebar() {
42
+ ?>
43
+ <div class="rp4wp-sidebar">
44
+
45
+ <div class="rp4wp-box">
46
+ <div class="rp4wp-sidebar-header">
47
+ <h3>Related Posts for WordPress</h3>
48
+ </div>
49
+
50
+ <p><?php _e( 'Plugin version', 'related-posts-for-wp' ); ?>: <?php echo RP4WP::VERSION; ?></p>
51
+ </div>
52
+
53
+ <div class="rp4wp-box">
54
+ <h3 class="rp4wp-title"><?php _e( 'More information', 'related-posts-for-wp' ); ?></h3>
55
+
56
+ <p><?php printf( __( "<a href='%s'>FAQ</a>", 'related-posts-for-wp' ), 'http://wordpress.org/plugins/related-posts-for-wp/faq/' ); ?></p>
57
+
58
+ <p><?php printf( __( "<a href='%s'>Change log</a>", 'related-posts-for-wp' ), 'http://wordpress.org/support/plugin/related-posts-for-wp' ); ?></p>
59
+
60
+ <p><?php printf( __( "<a href='%s'>Give us a review</a>", 'related-posts-for-wp' ), 'http://wordpress.org/support/view/plugin-reviews/related-posts-for-wp' ); ?></p>
61
+
62
+ <p><?php printf( __( "<a href='%s'>Release blog post</a>", 'related-posts-for-wp' ), 'http://www.barrykooij.com/related-posts-wordpress/?utm_source=plugin&utm_medium=link&utm_campaign=sidebar' ); ?></p>
63
+ </div>
64
+
65
+ <div class="rp4wp-box">
66
+ <h3 class="rp4wp-title"><?php _e( 'About the developer', 'related-posts-for-wp' ); ?></h3>
67
+
68
+ <p><?php _e( "Barry is a WordPress developer that works on WooCommerce by WooThemes and is the author of various WordPress plugins that include Post Connector, Related Posts for WordPress and What The File.", 'related-posts-for-wp' ); ?></p>
69
+
70
+ <p><?php _e( "Barry likes contributing to opensource projects and visiting WordCamps and WordPress meetups. He’s the organizer of the WordPress meetup in Tilburg.", 'related-posts-for-wp' ); ?></p>
71
+
72
+ <p><?php printf( __( "You can follow Barry on Twitter <a href='%s'>here</a>.", 'related-posts-for-wp' ), 'https://twitter.com/cageNL' ); ?></p>
73
+ </div>
74
+
75
+ </div>
76
+ <?php
77
+ }
78
+
79
+ /**
80
+ * Settings screen output
81
+ *
82
+ * @since 1.1.0
83
+ * @access public
84
+ */
85
+ public function screen() {
86
+ ?>
87
+ <div class="wrap">
88
+ <h2>Related Posts for WordPress</h2>
89
+
90
+ <div class="rp4wp-content">
91
+ <form method="post" action="options.php">
92
+ <?php settings_fields( 'rp4wp' ); //pass slug name of page, also referred
93
+ //to in Settings API as option group name
94
+ do_settings_sections( 'rp4wp' ); //pass slug name of page
95
+ submit_button();
96
+ ?>
97
+ </form>
98
+ </div>
99
+ <?php $this->sidebar(); ?>
100
+ </div>
101
+ <?php
102
+ }
103
+ }
classes/hooks/class-hook.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
 
 
4
 
5
  abstract class RP4WP_Hook {
6
  protected $tag = null;
1
  <?php
2
 
3
+ if ( !defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ } // Exit if accessed directly
6
 
7
  abstract class RP4WP_Hook {
8
  protected $tag = null;
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://www.barrykooij.com/
4
  Tags: related posts for wordpress, related posts for wp, simple related posts, easy related posts, related posts, related, relations, internal links, seo
5
  Requires at least: 3.6
6
  Tested up to: 3.9.2
7
- Stable tag: 1.0.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -68,5 +68,12 @@ There is one custom table created for the post cache, this table will however no
68
 
69
  == Changelog ==
70
 
 
 
 
 
 
 
 
71
  = 1.0.0 - August 7, 2014 =
72
  * Initial version
4
  Tags: related posts for wordpress, related posts for wp, simple related posts, easy related posts, related posts, related, relations, internal links, seo
5
  Requires at least: 3.6
6
  Tested up to: 3.9.2
7
+ Stable tag: 1.1.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
68
 
69
  == Changelog ==
70
 
71
+ = 1.1.0 - August 11, 2014 =
72
+ * Added option screen.
73
+ * Added to option to automatically link related posts on new posts, enabled by default.
74
+ * Added 'rp4wp_ignored_words' filter.
75
+ * Added 'rp4wp_thumbnail_size' filter.
76
+ * Added missing ABSPATH checks.
77
+
78
  = 1.0.0 - August 7, 2014 =
79
  * Initial version
related-posts-for-wp.php CHANGED
@@ -1,10 +1,9 @@
1
  <?php
2
-
3
  /*
4
  Plugin Name: Related Posts for WordPress
5
  Plugin URI: http://www.barrykooij.com/
6
  Description: Related Posts for WordPress, related posts that perform!
7
- Version: 1.0.0
8
  Author: Barry Kooij
9
  Author URI: http://www.barrykooij.com/
10
  License: GPL v3
@@ -25,6 +24,30 @@
25
 
26
  class RP4WP {
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  /**
29
  * Get the plugin file
30
  *
@@ -64,7 +87,7 @@ class RP4WP {
64
  /**
65
  * The constructor
66
  */
67
- public function __construct() {
68
  $this->init();
69
  }
70
 
@@ -87,6 +110,11 @@ class RP4WP {
87
  exit;
88
  }
89
 
 
 
 
 
 
90
  // Filters
91
  $manager_filter = new RP4WP_Manager_Filter( plugin_dir_path( __FILE__ ) . 'classes/filters/' );
92
  $manager_filter->load_filters();
@@ -98,8 +126,12 @@ class RP4WP {
98
 
99
  }
100
 
 
 
 
 
101
  function __rp4wp_main() {
102
- new RP4WP();
103
  }
104
 
105
  // Create object - Plugin init
1
  <?php
 
2
  /*
3
  Plugin Name: Related Posts for WordPress
4
  Plugin URI: http://www.barrykooij.com/
5
  Description: Related Posts for WordPress, related posts that perform!
6
+ Version: 1.1.0
7
  Author: Barry Kooij
8
  Author URI: http://www.barrykooij.com/
9
  License: GPL v3
24
 
25
  class RP4WP {
26
 
27
+ private static $instance = null;
28
+
29
+ const VERSION = '1.1.0';
30
+
31
+ /**
32
+ * @var RP4WP_Settings
33
+ */
34
+ public $settings = null;
35
+
36
+ /**
37
+ * Singleton get method
38
+ *
39
+ * @since 1.0.0
40
+ * @access public
41
+ *
42
+ * @return RP4WP
43
+ */
44
+ public static function get() {
45
+ if(null == self::$instance) {
46
+ self::$instance = new self();
47
+ }
48
+ return self::$instance;
49
+ }
50
+
51
  /**
52
  * Get the plugin file
53
  *
87
  /**
88
  * The constructor
89
  */
90
+ private function __construct() {
91
  $this->init();
92
  }
93
 
110
  exit;
111
  }
112
 
113
+ // Setup settings
114
+ if ( is_admin() ) {
115
+ $this->settings = new RP4WP_Settings();
116
+ }
117
+
118
  // Filters
119
  $manager_filter = new RP4WP_Manager_Filter( plugin_dir_path( __FILE__ ) . 'classes/filters/' );
120
  $manager_filter->load_filters();
126
 
127
  }
128
 
129
+ function RP4WP() {
130
+ return RP4WP::get();
131
+ }
132
+
133
  function __rp4wp_main() {
134
+ RP4WP();
135
  }
136
 
137
  // Create object - Plugin init