如何让任何人都能看到预定的帖子预览?

时间:2012-03-18 作者:Borek Bernard

当我写一篇文章并计划稍后发布时,WordPress将允许我预览该文章,就像它已经发布一样,但我需要以管理员身份(或任何有权预览该文章的人)登录。

是否有一种方法(可能是查询字符串参数)可以让任何人(即匿名用户)预览帖子?类似于my-post?previewsecret=645732116468?

2 个回复
最合适的回答,由SO网友:soulseekah 整理而成

草稿预览快速查看查询中的这段核心代码。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

SO网友:hookedonwinter

Soulseekah的回答令人难以置信,这正是我所寻找的。在搜索这篇文章的过程中,我还发现了一个插件(据我所知,它可能基于这篇文章)。

Public Post Preview

结束

相关推荐

PUBLISH_POST的添加操作不起作用

我正在开发一个个人投票插件,我不打算公开发布它,因为我还在学习WP。一般来说,你可以投票给帖子“向上”或“向下”。我有两个表,一个收集IP(不允许多次投票),另一个名为“post\\u votes”的表收集每个帖子的投票数。当我发布一篇新帖子时,它的ID存储在“post\\u votes”中,我可以在人们投票时更新每个帖子的“up”、“down”。这在几天前奏效了。我做了一些修改,但我不明白为什么它不再工作了。。这是目前为止的全部代码。。我仍然需要实施一些安全预防措施。<?php /*&#x