web-dev-qa-db-fra.com

Créer une page WordPress qui redirige vers une autre URL

Je voulais créer une nouvelle page WordPress qui soit en fait un lien vers un autre site. Le but est que la page apparaisse dans une liste de mes pages, mais envoie en réalité l'internaute à l'URL cible.

Par exemple, disons que je veux inclure une page qui indique "Mes photos" mais qui les redirige en fait vers Flickr. 

Je suppose qu'un moyen d'y parvenir consiste à utiliser une page de modèle personnalisée avec une instruction de redirection en PHP, mais malheureusement, je suis un débutant à PHP et je ne suis pas au courant du moyen de le faire ...

24
Dscoduc

Vous pouvez accomplir cela de deux manières, les deux devant être effectuées en modifiant vos fichiers de modèle. 

La première consiste simplement à ajouter un lien HTML à votre navigation où vous le souhaitez.

Le second (et je suppose, celui que vous recherchez) est de créer un nouveau modèle de page, ce qui n’est pas si difficile si vous avez la possibilité de créer un nouveau fichier .php dans votre répertoire theme/template. Quelque chose comme le code ci-dessous devrait faire:

<?php /*  
Template Name: Page Redirect
*/ 

header('Location: http://www.nameofnewsite.com');
exit();

?>

Où le nom du modèle est celui que vous voulez définir et l'URL dans la fonction d'en-tête est la nouvelle URL à laquelle vous voulez diriger un utilisateur. Après avoir modifié le code ci-dessus pour répondre à vos besoins, enregistrez-le dans un fichier php de votre dossier de thème actif sous le nom du modèle. Donc, si vous laissez le nom de votre modèle "Page Redirect", nommez le fichier php page-redirect.php. 

Une fois que cela a été enregistré, connectez-vous à votre backend WordPress et créez une nouvelle page. Vous pouvez ajouter un titre et un contenu au corps si vous le souhaitez, mais il est important de noter que sur le côté droit, il devrait y avoir une option déroulante pour choisir le modèle de page à utiliser, avec l'affichage par défaut. premier. Dans cette liste déroulante, il devrait y avoir le nom du nouveau fichier de modèle à utiliser. Sélectionnez le nouveau modèle, publiez la page et vous devriez être en or.

Vous pouvez également le faire de manière dynamique en utilisant la section Champs personnalisés sous l'éditeur de corps. Si vous êtes intéressé, faites le moi savoir et je peux coller le code pour ce gars dans une nouvelle réponse.

36
Schoffelman

J'ai constaté que ces problèmes sont souvent mieux résolus au niveau de la couche serveur. Avez-vous accès à un fichier .htaccess où vous pouvez placer une règle de redirection? Si c'est le cas:

RedirectPermanent /path/to/page http://uri.com

Cette redirection servira également une réponse "301 déplacés de façon permanente" pour indiquer que la page Flickr (par exemple) est l'URI permanent de l'ancienne page.

Si cela n'est pas possible, vous pouvez créer un modèle de page personnalisé pour chaque page en question et ajouter le code PHP suivant en haut du modèle de page (en réalité, c'est tout ce dont vous avez besoin dans le modèle:

header('Location: http://uri.com, true, 301');

Plus d'informations sur les en-têtes PHP .

11
Jason Leveille

Sinon, utilisez un filtre. 

Créez une page vide dans votre blog WordPress, nommée en fonction de vos besoins. Prenez note du post_id. Créez ensuite un filtre qui modifie son lien permanent.

add_filter('get_the_permalink','my_permalink_redirect');
function my_permalink_redirect($permalink) {
    global $post;
    if ($post->ID == your_post_id_here) {
        $permalink = 'http://new-url.com/pagename';
    }
    return $permalink;
}

De cette façon, l'URL s'affichera correctement dans la page, aucune redirection amusante n'est requise.

Si vous devez le faire beaucoup, pensez à utiliser les champs postmeta personnalisés pour définir une valeur postmeta pour "offsite_url" ou quelque chose du genre. Vous pouvez alors créer des pages à votre guise, saisir la valeur "offsite_url" puis utiliser un filtre comme celui ci-dessus, au lieu de vérifier le post_id, vérifiez si le postmeta est requis et modifiez le permalien si nécessaire.

7
Gipetto

Je ne connais pas bien les modèles Wordpress, mais je suppose que les en-têtes sont envoyés au navigateur par WP avant même que votre modèle ne soit chargé. Pour cette raison, la méthode de redirection commune de:

header("Location: new_url");

ne fonctionnera pas. Sauf s'il est possible de forcer l'envoi d'en-têtes via un modèle avant que WP ne fasse quoi que ce soit, vous devrez utiliser du Javascript, comme ceci:

<script language="javascript" type="text/javascript">
document.location = "new_url";
</script>

Mettez cela dans la section et il sera exécuté lors du chargement de la page. Cette méthode ne sera pas instantanée et ne fonctionnera pas non plus pour les personnes avec Javascript désactivé.

4
BraedenP

Utilisez le plugin "raw" https://wordpress.org/plugins/raw-html/ C'est aussi simple que:

[raw]
<script>
window.location = "http://www.site.com/new_location";
</script>
[/raw]
1
Jeroenv3

J'ai trouvé un plugin qui m'a aidé à faire cela en quelques secondes sans code d'édition:

https://wordpress.org/plugins/quick-pagepost-redirect-plugin/

Je l'ai trouvé ici: http://premium.wpmudev.org/blog/wordpress-link-title-external-url/

0
Ryan

Il y a 3 façons de faire cela:

  1. En changeant votre code 404.php.
  2. En utilisant les plugins wordpress.
  3. En modifiant votre fichier .htaccess.

Didacticiel complet donné à l'adresse http://bornvirtual.com/wordpress/redirect-404-error-in-wordpress/906/

0
Mazhar