草稿预览快速查看查询中的这段核心代码。php
[检查]post状态以确定是否应显示post。
http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/query.php#L2658
if ( ! is_user_logged_in() ) {
// User must be logged in to view unpublished posts.
$this->posts = array();
}
。。。对于未登录的用户来说,绕过有点不简单。您可以通过以下操作重写该函数的结果
deeper 然后照顾好角色。但这会带来太多的开销,并可能导致暴露的安全性。
如果你再往上看一点http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/query.php#L2632 在第2632行,您会发现帖子实际上是从数据库中提取的,可以使用posts_results
再低几行的钩子。
存储post的值,并在所有使posts
大堆http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/query.php#L2740 哪里the_posts
胡克急切地等待着。
所以有些粗糙的东西看起来像:
add_filter( \'posts_results\', \'wpse46014_peek_into_private\', null, 2 );
function wpse46014_peek_into_private( $posts, &$query ) {
if ( sizeof( $posts ) != 1 ) return $posts; /* not interested */
$status = get_post_status( $posts[0] );
$post_status_obj = get_post_status_object( $status );
if ( $post_status_obj->public ) return $posts; /* it\'s public */
if ( !isset( $_GET[\'key\'] ) || $_GET[\'key\'] != \'foryoureyesonly\' )
return $posts; /* not for your eyes */
$query->_my_private_stash = $posts; /* stash away */
add_filter( \'the_posts\', \'wpse46014_inject_private\', null, 2 );
}
function wpse46014_inject_private( $posts, &$query ) {
/* do only once */
remove_filter( \'the_posts\', \'wpse46014_inject_private\', null, 2 );
return $query->_my_private_stash;
}
使用密钥附加您的后期预览链接
?p=4601&key=foryoureyesonly
并为任何人显示帖子。代码有一些不好的地方,比如隐藏,你可以使用
globals
相反(不建议),或将其包装成对象(是!)并通过每个帖子的自定义密码等进一步扩展功能。
预定预览的工作方式非常相似。这个posts_results
填充了\'future\'
可以利用完全相同的方式和相同的挂钩发布状态。该代码将在不更改预定职位的情况下工作。
/2012/07/12/one-two-three/
- 404 NOT FOUND
/2012/07/12/one-two-three/?key=foryoureyesonly
- 200 OK