2017-07-25 3 views
0

J'utilise Buddypress et un plugin appelé Teambooking. Le plugin Teambooking ne connaît pas l'existence de Buddypress et utilise la chaîne de requête Wordpress par défaut (/? Author = "id", où id est le numéro d'identification de l'utilisateur) pour créer et afficher un lien vers la page d'un auteur. Mais Buddypress fournit des pages de profil pour les utilisateurs. Je veux donc être capable d'attraper quand quelqu'un clique sur le lien de la page d'auteur standard (/? Author = "id") et rediriger la page vers la page de profil utilisateur Buddypress. Je pensais pouvoir utiliser le hook 'template-redirect' pour attraper cet événement, mais cela ne fonctionne pas, parce que le hook n'est déclenché que lorsque la page de destination est chargée, et que Wordpress redirige automatiquement l'URL qui a la chaîne de requête /? author = "id" à la page index.php, parce qu'il n'y a pas de page author.php.Comment rediriger une requête d'auteur d'auteur vers une page de profil d'utilisateur buddypress dans Wordpress

Je ne peux pas utiliser $ _SERVER ["QUERY_STRING"] pour analyser l'URL, car comme je l'ai dit, Wordpress redirige automatiquement vers index.php, en supprimant la chaîne de requête. Je pensais aussi que je pourrais créer une page author.php, de sorte que WordPress arrête de rediriger vers index.php, et ensuite utiliser 'template_redirect' hook pour rediriger le author.php vers la page de profil buddypress, mais ça n'a pas été le cas. ne travaille pas non plus. J'ai créé author.php sur le répertoire de mon thème mais Wordpress continue à rediriger vers index.php.

Des idées sur la façon de cette redirection de la requête /? Author = "id" à la bonne page de profil buddypress de l'utilisateur?

Cela doit toujours arriver avec les plugins qui ne sont pas au courant de l'installation de Buddypress.

grâce

-Malena

Répondre

0

Buddypress ne fonctionne pas avec la structure permalien par défaut, il est donc probablement pas l'id auteur que vous recherchez. Si votre structure de permalien a été définie à Post le nom par exemple, alors cela fonctionnerait.

/* Redirect author page to buddypress page */ 
function my_page_template_redirect() 
{ 
    if(is_author()) 
    { 

     global $wp_query; 
     $user = get_user_by('slug', $wp_query->query['author_name']); 
     $url = bp_core_get_user_domain($user->ID); 
     wp_redirect($url); 
     exit(); 
    } 
} 
add_action('template_redirect', 'my_page_template_redirect'); 
+0

Salut Rob, merci pour votre réponse, j'avais essayé également d'utiliser Is_author() avant, mais ne fonctionnait pas, mais ce parce qu'un autre plugin, Yoast SEO, interférait et redirigeait une requête pour la page auteur (/? author = id) vers index.php. Voir ma réponse ci-dessous. Une fois que j'ai désactivé Yoast SEO, les choses fonctionnent avec is_author(). J'ai utilisé une version modifiée de votre code pour dériver l'identifiant, car l'URL n'a pas de slug mais plutôt une chaîne de requête (? Author = id), que j'ai dû analyser. – malena

1

Il se trouve que la version gratuite du plug-in Yoast SEO a été réoriente une requête pour la page de l'auteur (? Id = auteur) index.php automatiquement, et je n'étais pas au courant. J'ai donc dû désactiver le plugin Yoast SEO, puis utiliser is_author() pour détecter quand la page d'archive de l'auteur était demandée (? Author = id chaîne de requête dans l'URL) dans un hook de redirection de template afin de rediriger l'appel vers BuddyPress profil d'utilisateur. Voici le code que j'utilisé dans functions.php, qui fait la redirection:

/* Redirect author page to BuddyPress page */ 
function my_page_template_redirect() 
{ 
/** Detect if author archive is being requested and redirect to bp user profile page */ 
if(is_author()) 
{  
    global $wp_query; 
    if(isset($wp_query->query_vars['author'])) { 
     $userID = urldecode($wp_query->query_vars['author']); 
    } 
    $url = bp_core_get_user_domain($userID); 

    wp_redirect($url); 
    exit(); 
} 
add_action('template_redirect', 'my_page_template_redirect');