Wie leite ich nicht angemeldete Benutzer auf eine bestimmte Seite um?

16

So leiten Sie nicht angemeldete Benutzer, die eine bestimmte Seite / URL anfordern, auf eine andere Seite / URL um und zeigen eine Meldung wie "Nur für Mitglieder" an. Ich weiß, dass es recht einfach ist, mit der Funktion! Is_user_logged_in () zu programmieren, aber ich weiß nicht, wie ich es programmieren soll, weil ich ein Anfänger von WordPress bin. Bitte teilen Sie mir die Datei mit, in der der Code gespeichert werden soll.

user3187719
quelle

Antworten:

30

Hier sind 2 Beispiele, die Sie leicht modifizieren müssen, damit sie für Ihre speziellen Anforderungen funktionieren.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Fügen Sie dies in die Funktionsdatei Ihres untergeordneten Themas ein, ändern Sie die Seiten-ID oder den Slug und die Weiterleitungs-URL.

Sie können auch folgenden Code verwenden:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Sie können die Nachricht direkt zur Seite hinzufügen oder sie dem Code hinzufügen, wenn Sie die Nachricht für alle nicht angemeldeten Benutzer anzeigen möchten .

http://codex.wordpress.org/Function_Reference/wp_redirect

Brad Dalton
quelle
Vielen Dank für add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }Ihre Antwort, die mir gefallen hat, aber es funktioniert nicht
user3187719
Verwenden Sie die Seiten-ID oder den Slug hier, nicht die URL mydomain.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton
is_page ('teilnehmen')
Brad Dalton
7

Das wäre besser:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// continue as normal for authenticated users

Dadurch wird der Benutzer auf die Anmeldeseite umgeleitet. Sobald der Benutzer angemeldet ist, wird er zu der sicheren Seite zurückgeleitet, auf die er ursprünglich zugreifen wollte.

Dokumentation hier:

https://codex.wordpress.org/Function_Reference/auth_redirect

Yahya Uddin
quelle
4

Wie können wir Ihnen sagen, wo Sie es ablegen sollen, wenn Sie uns nicht gesagt haben, was und wo Sie es anzeigen möchten? Ganze Beiträge? Seiten? Benutzerdefinierte Teile von Seiten? Entschuldigung ... Ich glaube, meine Kristallkugel funktioniert heute nicht ganz.

Da du bist, und ich zitiere dich: "Ein Neuling in WordPress" solltest du lieber lernen, als um direkte Antwort zu bitten.

Was , wo Sie die Referenz 1 Link lesen sollte. Hier erfahren Sie, in welcher Datei Sie sie ablegen müssen.

Was , wie es tun sollten Sie zunächst Referenzverbindung 2 und 3 lesen.

Insgesamt sollte es ungefähr so ​​aussehen:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

Natürlich muss der obige Code in eine Schleife gehen . Sie können es so komplex oder so einfach aufbauen, wie Sie möchten. Zum Beispiel können Sie anstelle von einfachem Text, wenn Sie nicht angemeldet sind, das gesamte Anmeldeformular oder - wie ich vorschlagen würde - einen geteilten Bildschirm anzeigen, in dem sich Benutzer anmelden können (da Benutzer ein Konto haben können, aber vergessen haben, sich anzumelden) oder sich anzumelden (wenn er keinen hat).

  1. Vorlagenhierarchie
  2. Bedingte Tags
  3. Die Schleife

Nach den Kommentaren unten hinzugefügt:

Um die Verwendung headermit wp_login_url- erneut umzuleiten , überprüfen Sie die Referenzen 1 und 2 unten:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Referenz:

  1. Header - PHP
  2. wp_login_url
Borek
quelle
Eigentlich kenne ich die Funktion in WordPress nicht, die die angeforderte URL oder den angeforderten Permalink zurückgibt. Und über die Anzeige Nachricht, lassen Sie es, ich möchte sie nur umleiten, wenn sie bestimmte URL anfordern, ohne angemeldet zu sein.
user3187719
kann ich das mit $ pagenow machen?
user3187719
@ user3187719 hat meine ursprüngliche Antwort bearbeitet und die Lösung zum Weiterleiten hinzugefügt. PS. $pagenow? Sie versuchen, eine Fliege mit einer Kanone zu töten, aber warum so komplex? Halte es einfach. PS2: Lerne PHP und WP Codex.
Borek
4

Sie können nicht zu einer bestimmten Seite umleiten, aber jeder nicht angemeldete Benutzer wird zum Anmeldebildschirm umgeleitet.

<?php auth_redirect(); ?>

Wordpress-Referenz: auth_redirect()

Nur um eine andere Lösung zu erwähnen.

MCG
quelle