web-dev-qa-db-de.com

Leiten Sie Benutzer auf einer bestimmten Beitragskategorie oder Kategorieseite weiter

ich versuche, Benutzer auf bestimmte Kategorien mit diesem Hook umzuleiten:

// Show app-data posts only to app users
function user_redirect()
{
    if ( is_category( 'app-data' ) ) {
        $url = site_url();
        wp_redirect( $url );
        exit();
    }
}
add_action( 'the_post', 'user_redirect' );

Aber es funktioniert nicht und ich weiß nicht warum. Es wird umgeleitet, wenn der Benutzer die Kategorie durchsucht. Ich möchte umleiten, wenn der Benutzer die Kategorie oder einen Beitrag dieser Kategorie durchsucht

2
CDrosos

Warum funktioniert es nicht?

Es gibt ein großes Problem mit Ihrem Code ... Sie können nicht umleiten, nachdem bereits HTML-Inhalte gesendet wurden ... Eine solche Umleitung wird ignoriert ...

Warum ist Ihr Code falsch? Wegen the_post hook. Dieser Haken wird ausgelöst, wenn das Postobjekt eingerichtet wird. Normalerweise ist es also in der Schleife, was viel zu spät ist, um Weiterleitungen durchzuführen ...

Also, wie Sie Ihren Code reparieren?

Verwenden Sie einen anderen Haken.

Hier ist die Liste der verfügbaren Hooks, die während einer typischen Anfrage ausgelöst wurden .

Einer der besten Hooks für Redirects ( und häufig dafür verwendet ) ist template_redirect. Wie Sie sehen, wird es kurz vor dem Abrufen des Headers ausgelöst, sodass bereits alles eingerichtet ist.

function redirect_not_app_users_if_app_data_category() {
    if ( (is_category( 'app-data' ) || in_category('app-data'))&& ! is_user_logged_in() ) {
        wp_redirect( home_url() );
        die;
    }
}
add_action( 'template_redirect', 'redirect_not_app_users_if_app_data_category');
2

ändere deinen Hook-Namen the_post in template_redirect

add_action( 'template_redirect', 'wpse_restrict_catgorey');
function wpse_restrict_catgorey(){

  if( ! is_user_logged_in() && is_category( 'app-data' ) ) {
    wp_redirect( home_url() );
    exit;
  }
}
2
Jignesh Patel