web-dev-qa-db-fra.com

changer le statut d'une publication lorsque les utilisateurs mettent à jour leurs publications?

Existe-t-il un moyen efficace de changer le statut d'une publication de "publié" à "brouillon" lorsqu'un utilisateur d'un certain type tente de mettre à jour ses publications. J'ai essayé quelque chose dans ce sens

function change_post_status($post_id)
{
  if(current_user_can('rolename'))
  {
    $current_post = get_post( $post_id, 'ARRAY_A' );
    $current_post['post_status'] = 'draft';
    wp_update_post($current_post);
  }
}

add_action('pre_post_update','change_post_status'); 

Le code me semble bon, mais pour une raison quelconque, il ne fonctionne pas correctement et je pense que cela crée une boucle infinie (m'obligeant à redémarrer mon serveur SQL).

1
tyler

Donc, j'ai fini par utiliser le filtre wp_insert_post_data et je suis arrivé à ce qui suit, qui, après les tests, semble fonctionner correctement.

add_filter('wp_insert_post_data', 'change_post_status', '99');

function change_post_status($data)
{
    if( (current_user_can('role')) && ($data['post_type'] == 'custom_post_type') )
    {
        if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
        //then set the fields you want to update
        $data['post_status'] = 'draft';     
    }
    return $data;
}
0
tyler

Avez-vous essayé d'utiliser "wp_insert_post_data" au lieu de "pre_post_update"?

0
Daniel

Puisque votre logique est basée sur le rôle, ne lui donnez pas simplement la capacité publish_posts ? La manière dont le rôle natif de contributeur fonctionne.

0
Rarst