允许参与者查看自己的计划帖子

时间:2018-03-27 作者:Horakiri Suo

作为管理员,我可以预览预定的帖子。在帖子列表中,如果您将鼠标悬停在预定的帖子标题上,会显示一个“预览”链接。

作为一个投稿人,我可以预览一篇处于草稿或待定状态的文章。一旦安排好,我就不能再预览帖子了。

投稿人很想看看编辑对他们的文章做了什么,并希望在预定时间和尚未发布时看到它的预览。要明确的是:我并不是在寻找一种方法,允许投稿人在安排好后修改帖子,只是为了(预先)查看它。

在wordpress角色和功能中,我没有找到相关的功能。似乎有read、read\\u private\\u贴子、read\\u private\\u页面,但与read\\u own\\u future\\u贴子不同。我不知道为什么这甚至不是默认行为。奇怪的是,投稿人可以查看自己的帖子来撰写,而且一旦发布,就可以查看,但不能介于两者之间。还是我完全错过了什么?

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

我已经为此创建了一个自定义插件。如果您不知道如何使用它,请阅读基础知识on the wordpress site. 即使你不是技术人员,也不难:基本上,转到wp内容/插件,创建一个带有插件名称的文件夹,创建一个。带有插件名称的php文件,添加header 并粘贴下面的代码块。

然后上传文件,转到wordpress网站。您将在已安装的插件中看到您的插件。激活它。完成。

步骤1:如果帖子作者有预览链接,他们应该能够预览帖子。这对贡献者有用,但对任何角色都应该有用。

//allow post preview if you are the post owner, whatever role you might have (e.g. contributor)
function jv_change_post( $posts ) {
    if(is_preview() && !empty($posts)){
        $current_user_id = get_current_user_id();
        $author_id= $posts[0]->post_author;
        if($current_user_id == $author_id)
            $posts[0]->post_status = \'publish\';
    }

    return $posts;
}
add_filter( \'posts_results\', \'jv_change_post\', 10, 2 );
据我所知,这样做的目的是:每当wordpress查询帖子时,检查当前显示的页面是否是帖子预览。如果是,并且当前用户是文章的作者,请将状态更改为“发布”。这将允许作者查看帖子,无论帖子的真实状态如何(例如,如果有计划的话,“未来”)。

这并没有真正改变帖子的状态,只是让当前的查询结果认为帖子已经发布(因此可以查看)。

注意:我从another stackexchange post.

第二步:如何首先为文章作者提供预览链接?我通过在posts屏幕(管理部分)中添加链接作为一列来解决这个问题。代码如下:

//add preview link to posts overview in admin section (as extra column)
// add the column
function add_contributor_preview_column( $columns ) {
    if( !current_user_can( \'edit_others_posts\' ) ) {
        $previewColumn = array( \'preview\' => __( \'Preview\', \'your_text_domain\' ) );
        return array_merge($previewColumn, $columns);
    }
    else
        return $columns;
}
add_filter( \'manage_posts_columns\' , \'add_contributor_preview_column\' );

// add contents to the column
function display_post_preview( $column, $post_id ) {
    if($column == "preview"){
        $post = get_post($post_id);
        if($post->post_status == \'future\')
            echo \'<a href="/?p=\' . $post_id . \'&preview=true">preview</a>\';
        else
            echo \'<a href="\'. get_permalink($post_id) .\'">view</a>\';
    }
}
add_action( \'manage_posts_custom_column\' , \'display_post_preview\', 10, 2 );
无论如何,当我在做这件事的时候,我过滤掉了管理屏幕上的帖子。贡献者只看到自己的帖子,不会感到困惑。这一部分与问题没有直接关系,但它有助于为参与者清理界面。

//only show your own posts in the edit page if you\'re a contributor (avoid confusion)
function posts_for_current_author($query) {
    if(!is_admin())
        return $query;

    if( !current_user_can( \'edit_others_posts\' ) ) {
        $current_user_id = get_current_user_id();
        $query->set(\'author\', $current_user_id );
    }
    return $query;
}
add_filter(\'pre_get_posts\', \'posts_for_current_author\');

SO网友:Vantiya

您可以按如下方式编写查询以列出计划的帖子:您可以查看详细信息here

$the_query = new WP_Query(array( 
    \'post_status\' => \'future\',
    \'posts_per_page\' => 3,
    \'orderby\' => \'date\',
    \'order\' => \'ASC\'
));
要在详细信息页面上显示预定的帖子,您应该执行类似的操作,将代码添加到主题的函数中。php文件。可以查看详细信息here

add_filter(\'the_posts\', \'show_future_posts\');
function show_future_posts($posts) {
   global $wp_query, $wpdb;
    if(is_single() && $wp_query->post_count == 0) {
        $posts = $wpdb->get_results($wp_query->request);
    }
   return $posts;
}

结束

相关推荐

About Wordpress capabilities

我知道WordPress是博客引擎的最佳选择,通过一些插件,如Advance Custom Field,WP可以成为一个很棒的CMS。但它仍然有利于出版商将内容推送给用户。现在我的处境相当严峻。我的朋友想使用WP作为一个引擎,用户可以贡献他们的帖子,其他人可以查看它。是否可以使用WP我可以创建自定义主题(&a);插件可以做到这一点,但当用户在插件上放置很多东西(页面和帖子)时,它对性能有好处吗?