webentwicklung-frage-antwort-db.com.de

Wie überprüfe ich, ob ein Beitragsstatus auf Entwurf oder Ausstehend gesetzt ist?

Ich möchte den Status eines Beitrags überprüfen. Insbesondere möchte ich wissen, ob ein Beitrag als Entwurf festgelegt oder privat veröffentlicht ist.

Ich habe folgenden Code:

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

Es wird geprüft, ob der Status eines Beitrags nicht auf Entwurf gesetzt ist, oder ob er angemeldet ist, und der Beitrag wird entweder gerendert oder auf die 404-Seite umgeleitet.

Aus irgendeinem Grund sind privat veröffentlichte Beiträge für nicht angemeldete Benutzer sichtbar, und ich versuche, dies zu beheben.

2
Neelam Khan

Um den Beitrag mit dem Beitragsstatus private zu überprüfen, können Sie Folgendes ausführen:

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
}

Oder Sie können in Ihrem aktuellen Setup einfach nur published Posts anzeigen über:

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

Weitere Informationen zum Post-Status finden Sie auf der Codex-Seite .

6

Ich denke, das Problem liegt in Ihrer Logik. || bedeutet, wenn eine der Bedingungen erfüllt ist, wird sie ausgegeben, insbesondere wenn die erste Bedingung erfüllt ist, wird die zweite nicht mehr überprüft. Ihr Code wird also wie folgt aussehen:

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;
}

Also, was wir oben gemacht haben, ist, dass wir zuerst überprüft haben, ob der Benutzer angemeldet ist oder nicht. Wenn nicht eingeloggt, senden wir es von dort zurück. Es ist nicht möglich, die nächste if-Bedingung zu erreichen. Auf diese Weise können Sie verhindern, dass nicht angemeldete Benutzer diesen Beitrag sehen. In Ihrem Code erfahren Sie, wie die erste Bedingung erfüllt wird und if die nächste Bedingung nicht überprüft. So können nicht angemeldete Benutzer Ihren Beitrag sehen. Jetzt prüfen wir im zweiten if-Block den Post-Status. Wenn der Beitrag nur den Status private hat, wird er gerendert. Andernfalls wird es umgeleitet.

Wie auch immer, einige kleine Vorschläge, verwenden Sie !== anstelle von != und === anstelle von ==. Diese prüft auch Typen und macht es streng geprüft. Siehe meinen Code, ich habe diese verwendet.

Hoffe das oben hilft.

1
CodeMascot