J'ai un rôle personnalisé, appelé "dealer". Une fois qu'ils ont posté un nouveau message, ils ne peuvent plus le supprimer. Il est important qu'ils ne puissent pas mettre à jour la date non plus, et je suis un peu coincé sur la façon de procéder. Il semble que l'ancien D/M/Y soit conservé dans le répertoire global $ _POST. Je pensais donc écrire de nouveau toutes les informations mises à jour pour la date. Regarde mon code;
function rd_dealer_save_post($post_id)
{
$post_author_id = $_POST['post_author'];
//print_r($_POST);
//test if this author is a dealer based on the caps
if(!current_user_can('delete_published_posts'. $post_author_id))
{
$_POST['mm'] = $_POST['hidden_mm'];
$_POST['jj'] = $_POST['hidden_jj'];
$_POST['aa'] = $_POST['hidden_aa'];
$_POST['hh'] = $_POST['hidden_hh'];
$_POST['mn'] = $_POST['hidden_mn'];
}
print_r($_POST);
//die();
}
add_action('save_post', 'rd_dealer_save_post');
Est-ce que mon action est correcte? Toute pensée comme cela ne semble pas fonctionner ...
Merci Dan.
Comme @ tf a souligné dans son commentaire à la question, vous avez une erreur lors de la vérification de la capacité de l'utilisateur actuel: 'delete_published_posts'. $post_author_id
simplement n'existe pas .
Après cela, pour votre portée, le filtre wp_insert_post_data
remplacera probablement mieux que l'action save_post
: car celle-ci est exécutée lorsque la publication a déjà été enregistrée/mise à jour. Si quelque chose ne va pas, vous devez modifier et mettre à jour à nouveau.
Avec le filtre wp_insert_post_data
accroché, vous pouvez modifier les données en cours de mise à jour avant que la mise à jour ne soit exécutée, ce qui améliorera les performances.
add_filter('wp_insert_post_data', 'prevent_post_change', 20, 2);
function prevent_post_change( $data, $postarr ) {
if ( ! isset($postarr['ID']) || ! $postarr['ID'] || current_user_can('delete_published_posts') )
return $data;
$old = get_post($postarr['ID']); // old post
// prevent changing date
$data['post_date'] = $old->post_date
$data['post_date_gmt'] = $old->post_date_gmt
// prevent sent to trash
if ( $data['post_status'] == 'trash' ) $data['post_status'] = $old->post_status;
return $data;
}