web-dev-qa-db-fra.com

Restreindre à la publication si elle est en cours de modification

Sur une plate-forme avec de nombreux éditeurs, le problème que je rencontre est que deux éditeurs relisent simultanément le même message (sans tenir compte de la mise en garde concernant le fait que quelqu'un d'autre le modifie actuellement).

Existe-t-il une solution permettant de restreindre l'accès à une publication si celle-ci est en cours de modification par un autre utilisateur? Peut-être en désactivant le lien d'édition de l'article sur la liste des articles? Cela ne devrait s'appliquer aux éditeurs que s'ils ne sont pas l'auteur du message (nous ne voulons pas qu'ils soient bloqués de leur propre message) et les administrateurs devraient être exclus de toute restriction.

2
Christine Cooper

La notification d'avertissement est envoyée par la fonction wp_check_post_lock. Ce qui suit redirige l'utilisateur vers l'écran de publication de la liste si quelqu'un d'autre le modifie.

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();
    }
}

Et pour indiquer qu'un message est verrouillé, c'est-à-dire en cours de modification par un autre utilisateur, un petit signe rouge peut être ajouté aux actions de la ligne.

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