Wordpress 限制编辑,但允许预览自定义帖子状态

Posted

技术标签:

【中文标题】Wordpress 限制编辑,但允许预览自定义帖子状态【英文标题】:Wordpress restrict edit, but allow preview for custom post status 【发布时间】:2013-05-06 14:33:34 【问题描述】:

我正在开发一个带有 Edit Flow 插件的 Wordpress 网站,因此我可以创建自定义帖子状态来更轻松地管理作者和贡献者的帖子。

所以我创建了自定义帖子状态,并获得了以下过滤器来限制该帖子的编辑功能。它工作正常,但问题是用户(管理员除外)无法预览帖子。其他用户仍然可以在仪表板帖子列表中看到“预览”链接,但如果他们点击它并转到帖子预览页面 (../post-with-custom-status/?preview=true),它会说帖子可以'找不到。

function restrict_edit_custom_status_posts( $allcaps, $cap, $args ) 

    // Bail out if we're not asking to edit a post ...
    if( 'edit_post' != $args[0]
        // ... or user is admin
        || !empty( $allcaps['manage_options'] )
        // ... or user already cannot edit the post
        || empty( $allcaps['edit_posts'] ))
        return $allcaps;

    // Load the post data:
    $post = get_post( $args[2] );

    // If post have custom status
    if( 'my_custom_status' == $post->post_status ) 
    // Then disallow editing
    $allcaps["edit_posts"] = FALSE;
        return $allcaps;
    

    return $allcaps;


add_filter( 'user_has_cap', restrict_edit_custom_status_posts10, 3 );

那么有什么方法可以限制编辑功能,但允许预览?

【问题讨论】:

Duplicate question on WPSE. 无限循环注释。 【参考方案1】:

您可以使用“posts_results”过滤器将您的帖子状态“更改”为“发布”,仅用于预览和具有良好角色的管理员:(更改未保存)

add_filter( 'posts_results', array( get_class(), 'change_post' ), 10, 2 );

public static function change_post( $posts ) 


    if ( empty( $posts )) 
        return;
    

    if(!empty($_GET['preview']))

        if($_GET['preview'] == true)
            if(current_user_can('preview_your_post_type'))
                $post_id = $posts[0]->ID;
                $post_type = $posts[0]->post_type;
                $posts[0]->post_status = 'publish';
            
        
    

    return $posts;

【讨论】:

以上是关于Wordpress 限制编辑,但允许预览自定义帖子状态的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 自定义帖子类型单一作为存档的父级

将分数添加到 wordpress 自定义帖子类型 slug

按自定义日期范围输入过滤 wordpress 帖子

如何将自定义 javascript 添加到 WordPress 管理员?

tinyMCE.editors[] wordpress 4.8 未定义

通过 wpuf pro 更新帖子时更新 wordpress slug