Changer l'état des publications en en attente en fonction du rôle de l'utilisateur


Ali_k

J'ai un site membres où les utilisateurs doivent payer pour s'abonner. Lorsque l'utilisateur s'abonne, son rôle devient "membre" et peut désormais publier sur un type de publication personnalisé appelé "profil utilisateur"

ce que je veux faire est de changer le statut de tous les messages publiés en en attente dans ce type de message si, par exemple, le rôle de l'utilisateur est changé en "expiré"

J'ai essayé cela, mais ne semble pas avoir d'effet

 function auto_expire_posts(){
    global $wpdb, $wp_roles;
      //get all post ids of published posts.
      $post_ids = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_status = 'publish' ");

foreach($post_ids as $id){
$postid =  $id->ID;
if ($_GET['role'] == "expired" ) 
    {
        $profile_post = array();
        $profile_post['ID'] = $postid;
        $profile_post['post_status'] = 'pending';
        // Update the post into the database
         wp_update_post( $profile_post );

       }
}
}
add_action('set_user_role', 'auto_expire_posts');
random_user_name

Fondamentalement, votre fonction aurait dû expiré tous les messages . Fonctionnellement, cela fonctionne, donc quand vous dites "aucun effet", c'est surprenant.

Votre fonction doit être modifiée par - dessous, afin d'être plus efficace (vous n'avez pas besoin de boucler sur les poteaux) et pour vous assurer de mettre à jour uniquement les messages pertinents, ainsi que d' assurer qu'il ne jette pas des avis.

Code révisé:

// This action passes 3 parameters, so let's accept them - $user_id, $new_role, $old_roles
function auto_expire_posts( $user_id, $new_role, $old_roles ) {
    // If the user didn't USED to be a member, then no need to do anything
    if ( ! in_array( 'member', $old_roles ) ) {
        return;
    }

    global $wpdb;

    // Set the array of values to update
    $update = array(
        'post_status' => 'expired'
    );

    // Set the array that defines the "WHERE" clause
    // WHERE is ONLY published posts that are authored by the specified user
    $where = array(
        'post_status' => 'publish',
        'post_author' => $user_id
    );

    // $updated will contain the number of posts changed
    $updated = $wpdb->update( $wpdb->posts, $update, $where );
}

// Ensure the add_action passes the 3 parameters through (10 is the priority, 3 is the number of parameters)
add_action( 'set_user_role', 'auto_expire_posts', 10, 3 );

Ceci est testé, et j'ai prouvé que cela fonctionne. Cependant , il y a quelques raisons pour lesquelles vous trouverez peut - être qu'il ne fait pas ce que vous voulez:

  1. Ceci est le tire parti do_action('set_user_role')qui est WordPress cœur. Ce hook peut ne pas être appelé selon la façon dont vous modifiez le rôle de l'utilisateur. Ce crochet ne s'appelle si vous allez au profil de l' utilisateur à travers le tableau de bord, de changer le rôle et cliquez sur « Enregistrer l' utilisateur ». Si cela ne fonctionne pas, assurez-vous d'expliquer exactement comment vous modifiez les rôles.
  2. Cela ne fonctionnera pas si le rôle que vous utilisez n'est pas appelé "membre". Modifiez le code ci-dessus (où j'ai utilisé "membre") si nécessaire pour qu'il corresponde au rôle que vous utilisez réellement. Si cela ne fonctionne pas, assurez-vous d'expliquer exactement le nom du rôle que vous utilisez.
  3. "expiré" n'est pas un statut de publication que je connais. Je pense que cela supprimera l'affichage des messages, mais ce n'est peut-être pas le cas. Si cela ne fonctionne pas, assurez-vous de regarder dans la base de données pour voir si les statuts des publications changent .
  4. Si vous n'installez pas cette fonction / crochet dans (l'un des nombreux) emplacements appropriés, il se peut qu'elle ne soit pas appelée.

Articles connexes


rendre des parties du modèle en fonction du rôle de l'utilisateur

Sorebrez Ma question concerne l'affichage uniquement des parties d'un modèle pour lesquelles un utilisateur est autorisé. Supposons qu'il existe un projet avec uniquement des utilisateurs et des rôles d'utilisateur et ses modèles et contrôleurs générés par phx

Changer le contenu en fonction de l'état

Denver Dang Donc, dans Angular, je peux créer un bouton en faisant quelque chose comme ceci: <a (click)="toggleState = !toggleState">Click me</a> Je peux ensuite l'utiliser pour ajouter / supprimer une classe pour une sorte de div, par exemple: <div [ngClass]

effectuer des actions en fonction du rôle de l'utilisateur laravel

Danabek Duisekov usersla table a une clé étrangère role_id, la rolestable contient un namechamp, un modérateur et un client prédéfinis. Je développe une API, j'ai TicketController, et seuls les clients devraient pouvoir les créer. Maintenant, le magasin Ticket