web-dev-qa-db-fra.com

Rediriger les utilisateurs sur une catégorie de message ou une page de catégorie spécifique

im essayant de rediriger les utilisateurs sur une catégorie spécifique avec ce crochet:

// 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' );

Mais ça ne marche pas et je ne sais pas pourquoi. il redirige si l'utilisateur navigue dans la catégorie. je veux rediriger si l'utilisateur navigue dans la catégorie ou un post de cette catégorie

2
CDrosos

Pourquoi ça ne marche pas?

Il y a un problème majeur avec votre code ... Vous ne pouvez pas rediriger après qu'un contenu HTML ait déjà été envoyé ... Cette redirection sera ignorée ...

Alors, pourquoi votre code est-il incorrect? À cause de the_post hook. Ce hook est activé lorsque l'objet de post est configuré. Donc d'habitude c'est dans la boucle, ce qui est beaucoup trop tard pour faire des redirections ...

Alors, comment réparer votre code?

Utilisez un autre crochet.

Voici la liste des hooks disponibles activés lors d'une requête typique .

L'un des meilleurs points d'ancrage pour effectuer des redirections ( et couramment utilisé pour cela ) est template_redirect. Comme vous pouvez le voir, il est déclenché juste avant l’en-tête, donc tout est déjà configuré.

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
Krzysiek Dróżdż

changez le nom de votre crochet the_post en 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