web-dev-qa-db-fra.com

Comment déverrouiller un post par programmation?

Je peux utiliser wp_set_post_lock pour verrouiller temporairement un message afin que je puisse le modifier.

Je peux utiliser wp_refresh_post_lock pour actualiser ce verrou.

Je peux utiliser wp_check_post_lock pour vérifier si un message est verrouillé.

... mais comment puis-je enlever le verrou post? Mon hypothèse serait qu'il existe une fonction appelée wp_remove_post_lock ou wp_release_post_lock, mais aucune de celles-ci ne semble exister.

Alors, comment puis-je enlever le post-lock? Je n'ai sûrement pas besoin d'attendre que ça expire, non?

2
Pikamander2

Au premier abord, cela a du sens, mais ...

Quand exactement cette fonction serait-elle utilisée? Lorsque l'utilisateur ouvre l'éditeur de publication, vous pouvez facilement vous connecter à cette action et définir le verrou.

Mais quand l'enlèveriez-vous? Après avoir économisé? Non - l'utilisateur est toujours en train d'éditer, le verrou devrait donc être activé.

Il doit être supprimé une fois que l'utilisateur a fermé l'onglet ou l'éditeur - mais vous ne pouvez pas vous connecter à ces actions depuis PHP, car il n'y a pas PHP averti juste avant qu'elles se produisent ...

Donc, probablement, il n'y a pas de fonction pour enlever le verrou, parce que cela ne sert à rien en utilisation normale ...

Bien sûr, vous pouvez toujours facilement enlever ce verrou ...

Voyons ce qu'est exactement ce verrou et comment WP le définit:

function wp_set_post_lock( $post_id ) {
    if ( ! $post = get_post( $post_id ) ) {
        return false;
    }
 
    if ( 0 == ( $user_id = get_current_user_id() ) ) {
        return false;
    }
 
    $now = time();
    $lock = "$now:$user_id";
 
    update_post_meta( $post->ID, '_edit_lock', $lock );
 
    return array( $now, $user_id );
}

OK, donc il est stocké dans un fichier personnalisé appelé '_edit_lock', alors ... Supprimez simplement cette méta et le verrou sera supprimé.

delete_post_meta( $post_id, '_edit_lock')
2
Krzysiek Dróżdż