web-dev-qa-db-ja.com

現在編集中の場合は投稿へのアクセスを制限する

多くの編集者がいるプラットフォームでは、私が経験している問題は、2人の編集者が同じ投稿を同時に校正していることです(そして現在他の誰かがその投稿を編集しているという警告通知を無視します)。

投稿が現在別のユーザーによって編集されている場合、その投稿へのアクセスを制限できる解決策はありますか?投稿リストの投稿の編集リンクを無効にすることで、多分?これは、編集者が投稿の著者ではない場合にのみ有効になり(自分の投稿から締め出されたくない)、管理者は制限から除外されるべきです。

2

警告通知は関数wp_check_post_lockによってディスパッチされます。以下は、他の誰かが編集している場合、ユーザーを投稿一覧画面にリダイレクトします。

add_action( 'load-post.php', 'redirect_locked_post_wpse_95718' );

function redirect_locked_post_wpse_95718()
{
    if( isset($_GET['post'] ) && wp_check_post_lock( $_GET['post'] ) )
    {
        global $typenow;
        $goto = ( 'post' == $typenow ) ? '' : "?post_type=$typenow";
        wp_redirect( admin_url( "edit.php$goto" ) );
        exit();
    }
}

また、投稿がロックされていること、つまり他のユーザーによって編集されていることを示すために、小さい赤い記号を行アクションに追加できます。

locked post

foreach( array( 'post', 'page' ) as $hook )
    add_filter( "{$hook}_row_actions", 'locked_post_notice_wpse_95718', 10, 2 );

function locked_post_notice_wpse_95718( $actions, $post ) 
{
    if( wp_check_post_lock( $post->ID ) )
    {
        $actions['locked'] = sprintf(
            '<span style="color:#f00;font-weight:bolder;">&#149;&#149;&#149; LOCKED %s &#149;&#149;&#149;</span>',
            strtoupper( $post->post_type )
        );
    }
    return $actions; 
}
2
brasofilo