我已经为此创建了一个自定义插件。如果您不知道如何使用它,请阅读基础知识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\');