web-dev-qa-db-fra.com

Comment vérifier si un statut de publication est défini sur brouillon ou en attente?

Je souhaite vérifier le statut des publications, en particulier savoir si une publication est définie pour être brouillon ou si elle est publiée à titre privé.

J'ai le code suivant:

   if ('draft' !=  get_post_status() || is_user_logged_in()) {
        $this->render();
    }
    else {
        wp_redirect( site_url('404') );
        exit;
    }

Il vérifie si le statut des publications n'est pas défini sur Brouillon ou s'il est connecté, puis rend la publication ou les redirections vers la page 404.

Pour une raison quelconque, les publications privées sont visibles pour les utilisateurs non connectés et j'essaie de résoudre ce problème.

2
Neelam Khan

Pour vérifier la publication avec le statut de publication private, vous pouvez exécuter les opérations suivantes:

if (get_post_status() == 'private' && is_user_logged_in()) {
     // it's private and user is logged in, do stuff
} elseif (get_post_status() == 'draft') {
     // it's draft, do stuff
} else {
      // it's something else, do stuff
}

Ou, dans votre configuration actuelle, vous pouvez simplement simplement afficher published posts via:

if (get_post_status() == 'publish') {
     // it's published, do stuff
     $this->render();
}

Vous pouvez en savoir plus sur les statuts de publication via la page du codex } _.

6
Christine Cooper

Je pense que le problème vient de votre logique. || signifie que si l'une des conditions est satisfaite, elle sera rendue, spécialement si la première condition est satisfaite, elle ne vérifie plus la seconde. Donc, votre code sera comme ci-dessous-

if( !is_user_logged_in() ) {
    return; // or do whatever you want to do if the user isn't logged in.

    // Or these below things 

    // wp_redirect( site_url('404') );
    // exit;
}

if ( 'private' === get_post_status()) {
    // Only render private posts.
    $this->render();
} else {
    wp_redirect( site_url('404') );
    exit;
}

Donc, ce que nous avons fait ci-dessus, c'est d'abord que nous avons vérifié si l'utilisateur est connecté ou non. Si non connecté, nous le renvoyons à partir de là. Il n'est pas possible d'atteindre la prochaine condition si. De cette façon, vous pouvez empêcher les utilisateurs non-connectés de voir ce message. Dans votre code, vous indiquez que la première condition est satisfaite et que if ne vérifie pas la condition suivante. Ainsi, les utilisateurs non connectés peuvent voir votre message. Maintenant, dans le deuxième bloc if, nous vérifions le statut de la publication. Si le message a le statut private seulement, il sera rendu. Sinon, ça va être redirigé.

Quoi qu'il en soit, quelques petites suggestions, utilisez !== plutôt que != et === plutôt que ==. Ces types de contrôles aussi et le rend strictement vérifié. Voir mon code, j'ai utilisé ceux-ci.

J'espère que cela aide.

1
CodeMascot