Public Post Preview - Version 2.3

Version Description

(2013-11-18): = * Introduces a filter ppp_preview_link. With the filter you can adjust the preview link. * If a post has gone live, redirect to it's proper permalink. * Adds the query var _ppp to WordPress SEO by Yoast whitelist.

Download this release

Release Info

Developer ocean90
Plugin Icon 128x128 Public Post Preview
Version 2.3
Comparing to
See all releases

Code changes from version 2.2 to 2.3

Files changed (2) hide show
  1. public-post-preview.php +32 -5
  2. readme.txt +18 -18
public-post-preview.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  * Plugin Name: Public Post Preview
4
- * Version: 2.2
5
  * Description: Enables you to give a link to anonymous users for public preview of any post type before it is published.
6
  * Author: Dominik Schilling
7
  * Author URI: http://wphelper.de/
@@ -71,6 +71,9 @@ class DS_Public_Post_Preview {
71
  add_filter( 'pre_get_posts', array( __CLASS__, 'show_public_preview' ) );
72
 
73
  add_filter( 'query_vars', array( __CLASS__, 'add_query_var' ) );
 
 
 
74
  } else {
75
  add_action( 'post_submitbox_misc_actions', array( __CLASS__, 'post_submitbox_misc_actions' ) );
76
 
@@ -189,13 +192,15 @@ class DS_Public_Post_Preview {
189
  * @return string The generated public preview link.
190
  */
191
  private static function get_preview_link( $post_id ) {
192
- return add_query_arg(
193
  array(
194
  'preview' => true,
195
  '_ppp' => self::create_nonce( 'public_post_preview_' . $post_id ),
196
  ),
197
  get_permalink( $post_id )
198
  );
 
 
199
  }
200
 
201
  /**
@@ -325,10 +330,10 @@ class DS_Public_Post_Preview {
325
  if ( empty( $post_id ) )
326
  return false;
327
 
328
- if( ! self::verify_nonce( get_query_var( '_ppp' ), 'public_post_preview_' . $post_id ) )
329
  wp_die( __( 'The link has been expired!', 'ds-public-post-preview' ) );
330
 
331
- if ( ! in_array( $post_id, get_option( 'public_post_preview', array() ) ) )
332
  wp_die( __( 'No Public Preview available!', 'ds-public-post-preview' ) );
333
 
334
  return true;
@@ -349,12 +354,34 @@ class DS_Public_Post_Preview {
349
  if ( empty( $posts ) )
350
  return;
351
 
352
- if ( self::public_preview_available( $posts[0]->ID ) )
 
 
 
 
 
353
  $posts[0]->post_status = 'publish';
354
 
355
  return $posts;
356
  }
357
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  /**
359
  * Get the time-dependent variable for nonce creation.
360
  *
1
  <?php
2
  /**
3
  * Plugin Name: Public Post Preview
4
+ * Version: 2.3
5
  * Description: Enables you to give a link to anonymous users for public preview of any post type before it is published.
6
  * Author: Dominik Schilling
7
  * Author URI: http://wphelper.de/
71
  add_filter( 'pre_get_posts', array( __CLASS__, 'show_public_preview' ) );
72
 
73
  add_filter( 'query_vars', array( __CLASS__, 'add_query_var' ) );
74
+
75
+ // Add the query var to WordPress SEO by Yoast whitelist.
76
+ add_filter( 'wpseo_whitelist_permalink_vars', array( __CLASS__, 'add_query_var' ) );
77
  } else {
78
  add_action( 'post_submitbox_misc_actions', array( __CLASS__, 'post_submitbox_misc_actions' ) );
79
 
192
  * @return string The generated public preview link.
193
  */
194
  private static function get_preview_link( $post_id ) {
195
+ $link = add_query_arg(
196
  array(
197
  'preview' => true,
198
  '_ppp' => self::create_nonce( 'public_post_preview_' . $post_id ),
199
  ),
200
  get_permalink( $post_id )
201
  );
202
+
203
+ return apply_filters( 'ppp_preview_link', $link, $post_id );
204
  }
205
 
206
  /**
330
  if ( empty( $post_id ) )
331
  return false;
332
 
333
+ if ( ! self::verify_nonce( get_query_var( '_ppp' ), 'public_post_preview_' . $post_id ) )
334
  wp_die( __( 'The link has been expired!', 'ds-public-post-preview' ) );
335
 
336
+ if ( ! in_array( $post_id, self::get_preview_post_ids() ) )
337
  wp_die( __( 'No Public Preview available!', 'ds-public-post-preview' ) );
338
 
339
  return true;
354
  if ( empty( $posts ) )
355
  return;
356
 
357
+ $post_id = $posts[0]->ID;
358
+
359
+ // If the post has gone live, redirect to it's proper permalink
360
+ self::maybe_redirect_to_published_post( $post_id );
361
+
362
+ if ( self::public_preview_available( $post_id ) )
363
  $posts[0]->post_status = 'publish';
364
 
365
  return $posts;
366
  }
367
 
368
+ /**
369
+ * Sets the post status of the first post to publish, so we don't have to do anything
370
+ * *too* hacky to get it to load the preview.
371
+ *
372
+ * @since 2.0.0
373
+ *
374
+ * @param int $post_id The post id.
375
+ * @return boolean False, if post isn't published.
376
+ */
377
+ private static function maybe_redirect_to_published_post( $post_id ) {
378
+ if ( 'publish' != get_post_status( $post_id ) )
379
+ return false;
380
+
381
+ wp_redirect( get_permalink( $post_id ), 301 );
382
+ exit;
383
+ }
384
+
385
  /**
386
  * Get the time-dependent variable for nonce creation.
387
  *
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Public Post Preview ===
2
  Contributors: ocean90
3
- Tags: public, post, preview, posts, custom post types
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VR8YU922B7K46
5
  Requires at least: 3.5
6
- Tested up to: 3.6
7
- Stable tag: 2.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -21,7 +21,7 @@ Have you ever been writing a post with the help of someone who does not have acc
21
  *Previously this plugin was maintained by [Matt Martz](http://profiles.wordpress.org/sivel/) and was an idea of [Jonathan Dingman](http://profiles.wordpress.org/jdingman/).*
22
 
23
  = Feedback =
24
- If you want, you can drop me a line @[ocean90](http://twitter.com/ocean90) on Twitter or @[Dominik Schilling](https://plus.google.com/101675293278434581718/) on Google+.
25
 
26
  = More =
27
  Try also some of my [other plugins](http://profiles.wordpress.org/users/ocean90) or visit my site [wpGrafie.de](http://wpgrafie.de/).
@@ -66,16 +66,11 @@ New plugin maintainer, supports now all public post types, saves preview status
66
 
67
  == Usage ==
68
  * To enable a public post preview check the box below the edit post box.
69
- * The link will be displayed if the checkbox is checked, just copy and share the link with your frieds.
70
  * To disable a preview just uncheck the box.
71
 
72
  == Frequently Asked Questions ==
73
 
74
- **I have activated the "WordPress SEO by Yoast" plugin and enabled the option "Redirect ugly URL's to clean permalinks.". The public preview doesn't work. What can I do?**
75
-
76
- Please add <strong>_ppp</strong> to the input field "Other variables not to clean:" on SEO -> Permalinks screen.
77
-
78
-
79
  **After some time the preview link returns the message "The link has been expired!". Why?**
80
 
81
  The plugin generates an URL with an expiring nonce. By default a link "lives" 48 hours. After 48 hours the link is expired and you need to copy and share a new link which is automatically generated on the same place under the editor.
@@ -91,22 +86,27 @@ function my_nonce_life() {
91
  }`
92
 
93
  == Change Log ==
94
- = 2.2 (20013-03-15): =
95
- * Based on feedback I have removed the extra metabox and added the preview link to the main Publish metabox
96
- * Only shows the checkbox if the post status/post type is good
97
- * Requires now WordPress 3.5
 
 
 
 
 
98
 
99
- = 2.1.1 (20012-09-19): =
100
  * Sorry for the new update. Through a change in 2.1 a filter was applied to each query. The misplaced "The link has been expired!" message is now gone. Props Aki Björklund and Jonathan Channon.
101
 
102
- = 2.1 (20012-09-16): =
103
  * Introduces a filter `ppp_nonce_life`. With the filter you can adjust the expiration of a link. By default a link has a lifetime of 48 hours.
104
  * In some situations (still not sure when) the preview link is rewritten as a permalink which results in an error. The plugin now works in this situations too.
105
 
106
- = 2.0.1 (20012-07-25): =
107
  * Makes the preview link copyable again
108
 
109
- = 2.0 (20012-07-23): =
110
  * Support for all public post types
111
  * Saves public preview status via an AJAX request
112
  * I18n
1
  === Public Post Preview ===
2
  Contributors: ocean90
3
+ Tags: public, post, preview, posts, custom post types, draft
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VR8YU922B7K46
5
  Requires at least: 3.5
6
+ Tested up to: 3.9
7
+ Stable tag: 2.3
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
21
  *Previously this plugin was maintained by [Matt Martz](http://profiles.wordpress.org/sivel/) and was an idea of [Jonathan Dingman](http://profiles.wordpress.org/jdingman/).*
22
 
23
  = Feedback =
24
+ If you want, you can drop me a line @[ocean90](http://twitter.com/ocean90) on Twitter or @[Dominik Schilling](https://plus.google.com/+DominikSchilling/) on Google+.
25
 
26
  = More =
27
  Try also some of my [other plugins](http://profiles.wordpress.org/users/ocean90) or visit my site [wpGrafie.de](http://wpgrafie.de/).
66
 
67
  == Usage ==
68
  * To enable a public post preview check the box below the edit post box.
69
+ * The link will be displayed if the checkbox is checked, just copy and share the link with your friends.
70
  * To disable a preview just uncheck the box.
71
 
72
  == Frequently Asked Questions ==
73
 
 
 
 
 
 
74
  **After some time the preview link returns the message "The link has been expired!". Why?**
75
 
76
  The plugin generates an URL with an expiring nonce. By default a link "lives" 48 hours. After 48 hours the link is expired and you need to copy and share a new link which is automatically generated on the same place under the editor.
86
  }`
87
 
88
  == Change Log ==
89
+ = 2.3 (2013-11-18): =
90
+ * Introduces a filter `ppp_preview_link`. With the filter you can adjust the preview link.
91
+ * If a post has gone live, redirect to it's proper permalink.
92
+ * Adds the query var `_ppp` to WordPress SEO by Yoast whitelist.
93
+
94
+ = 2.2 (2013-03-15): =
95
+ * Based on feedback I have removed the extra metabox and added the preview link to the main Publish metabox.
96
+ * Only show the checkbox if the post status/post type is good.
97
+ * Requires WordPress 3.5.
98
 
99
+ = 2.1.1 (2012-09-19): =
100
  * Sorry for the new update. Through a change in 2.1 a filter was applied to each query. The misplaced "The link has been expired!" message is now gone. Props Aki Björklund and Jonathan Channon.
101
 
102
+ = 2.1 (2012-09-16): =
103
  * Introduces a filter `ppp_nonce_life`. With the filter you can adjust the expiration of a link. By default a link has a lifetime of 48 hours.
104
  * In some situations (still not sure when) the preview link is rewritten as a permalink which results in an error. The plugin now works in this situations too.
105
 
106
+ = 2.0.1 (2012-07-25): =
107
  * Makes the preview link copyable again
108
 
109
+ = 2.0 (2012-07-23): =
110
  * Support for all public post types
111
  * Saves public preview status via an AJAX request
112
  * I18n