web-dev-qa-db-fra.com

Besoin d'aide avec les URL conviviales dans Wordpress

Je crée certains modèles personnalisés dans Wordpress et je transmets des données dans les URL.

Actuellement, mon URL ressemble à ceci: http://www.mysite.com/designers/?id=43&name=designer+name

L'URL contient l'ID et le nom du concepteur.

Je voudrais vraiment utiliser ceci: http://www.mysite.com/designers/designer+name/

Ma structure de lien permanent est définie sur /%category%/%postname%/

Mon fichier .htaccess ressemble à ceci:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

J'ai consulté http://codex.wordpress.org/Using_Permalinks , mais je ne suis pas devenu plus sage.

J'ai deux questions:

  1. Est-il utile de changer l'URL ci-dessus concernant le référencement
  2. Comment puis-je obtenir la "jolie" URL?

UPDATE
J'ajoute quelques informations supplémentaires pour clarification.

  • Je développe le site moi-même
  • Le modèle est un modèle personnalisé à 100%
  • En fonction des informations de $ _GET, je charge les données de ma table de base de données personnalisée et l’affiche à la page.
  • Mon site a une moyenne de 3-400 visiteurs uniques par jour. Au pic j'ai 2000 visiteurs uniques par jour.
  • Je développe un magazine de mode en ligne
  • Mon URL est en cours de création comme ceci:

    Url = get_permalink().'?bid='.$brand->id.'&name='.$brand->name;

  • J'ai utilisé une méthode similaire ici:
    http://storelocator.no/search/?brandID=4673&storeID=0&brand=Moods+of+Norway

Utiliser le type de message personnalisé était une option à laquelle j’avais pensé, mais j’avais besoin de ma propre structure de tableau car les concepteurs/marques sont liés à des galeries (et d’autres liens à venir). Donc, enregistrer les données de la marque dans la table WP POST ne fonctionnait pas.

Donc j'ai besoin de savoir ceci:

  • Que dois-je faire avec ma structure Permalink?
  • Que dois-je faire avec mon fichier .htaccess?
5
Steven

Je ne sais pas (ou je ne savais pas) beaucoup de choses sur les règles de réécriture moi-même (mais il semble que personne ne le fait ), mais, à partir de quelques autres réponses ici, j'ai réussi à faire fonctionner cela. Nous ajoutons une nouvelle règle de réécriture qui correspond à designers/designer_name/. Nous "vidons" les règles de réécriture afin qu'elles soient enregistrées dans la base de données, mais assurez-vous de ne le faire qu'une seule fois, car l'opération est coûteuse. Maintenant, nous configurons un modèle qui correspond à notre page et enregistrons la partie supplémentaire dans la variable de requête designer_name. Puisque WordPress ne sait pas qu'il doit regarder cette variable, nous nous connectons au filtre query_vars et lui demandons de regarder cela aussi.

Maintenant, dans le fichier de thème page-designers.php, nous pouvons faire get_query_var('designer_name') et il vous donnera le nom du concepteur. Si vous souhaitez des éléments supplémentaires tels que la pagination (designer/designer_name/page/2), vous devez ajouter une règle de réécriture supplémentaire pour cela (ou des flux, ou tout ce qui commence par designer/designer_name). Mais le matériel de base devrait fonctionner.

<?php
/*
Plugin Name: WPA 3537
Plugin URI: http://wordpress.stackexchange.com/questions/3537/need-help-with-friendly-urls-in-wordpress
Description: Need help with friendly URL's in Wordpress
Version: 1.0
Author: Jan Fabry
*/

register_activation_hook(__FILE__, 'wpa3537_flush_rules');
function wpa3537_flush_rules()
{
    add_rewrite_rule('designers/([^/]+)', 'index.php?pagename=designers&designer_name=$matches[1]', 'top');
    flush_rewrite_rules(false);
}

add_filter('query_vars', 'wpa3537_query_vars');
function wpa3537_query_vars($query_vars)
{
    $query_vars[] = 'designer_name';
    return $query_vars;
}
4
Jan Fabry

J'ai d'abord une question: comment obtenez-vous des URL ressemblant à ce qui suit?

http://www.example.com/designers/?id=43&name=designer+name

Ce ne sont pas des URL standard pour WordPress; Est-ce que votre vision est celle de devrait ou votre site fonctionne-t-il réellement de cette façon? Et si oui, comment ces URL ont-elles été créées? Est-ce un site hautement personnalisé? Qui l'a personnalisé? vous ou quelqu'un d'autre?

À propos de .htaccess

Cela dit, nous allons commencer par .htaccess pour éviter cela . Le vôtre est identique à pratiquement tous les fichiers .htaccess de l’installation WordPress, à l’exception des installations qui 1.) servent dans un sous-répertoire d’URL (et la différence est donc triviale)} _, 2.) WordPress isole les URL autour de leur chemin et/ou 3.) sauf pour les rares installations avancées qui nécessitent réellement .htaccess mucking (et si vous ne savez pas pourquoi vous auriez besoin de le faire, vous êtes presque 100% 't.)

À propos des catégories principales dans les URL WordPress

Ensuite, le format de votre URL souhaité avec le nom de la catégorie dans le premier segment de chemin est un motif que la communauté WordPress fronce aux sourcils pour des raisons de performances, voyez ceci:

En gros, le problème est que si vous avez plus d'une poignée pour "Pages" (c'est-à-dire $post->post_type=='page'), WordPress comparera chaque URL pour chaque chargement de page à l'URL de chaque page, ce qui peut ralentir votre système. Cela dit, si vous ne possédez qu'une poignée de pages et que vous ne possédez pas de site à fort trafic, je vous conseille de ne pas vous laisser abattre.

 Screenshot showing what Pages in WordPress are, i.e. $post_type=='page' 
(source: mikeschinkel.com )

Passons maintenant à vos questions.

1.) Est-il utile de changer l'URL ci-dessus concernant le référencement

Oui. Nettoyer l'URL améliore la densité de vos mots clés. Cela dit, à mon avis il y a beaucoup plus dans le référencement que ce que le moteur de recherche voit et rendre vos URL plus conviviales donnera aux gens plus de confiance en eux et le rendra plus susceptible de vous lier à votre site dans des blogs et partagez vos liens sur Twitter, sur Facebook et ailleurs. Cela crée deux avantages; plus de liens les moteurs de recherche voient et plus d'exposition du partage.

Personnellement, j'aime penser à la façon dont on s'habille; si vous êtes vraiment en désordre, les gens vont avoir une opinion subconsciente de vous plus basse que si vous êtes méticuleux. Je pense que la même chose est vraie avec les URL; si vous avez des URL propres et conviviales, votre maison semble être en ordre; si vous avez des adresses URL peu soignées, votre site ne sera tout simplement pas "senti" même, encore une fois, par courrier électronique. (Les URL désagréables sont l'une des raisons pour lesquelles j'aime pas utiliser LinkedIn. Je pense qu'elles auraient eu plus de succès si elles avaient prêté attention aux URL comme Twitter, par exemple.)} _

2.) Comment puis-je obtenir la "jolie" URL?

Je pense que cet article et/ou cette page sur le Codex devraient pouvoir aider?

En gros, vous devez définir votre modèle de permaliens, puis les enregistrer. Vous devrez peut-être utiliser FTP pour modifier les paramètres d'autorisation sur .htaccess avant que WordPress ne puisse les enregistrer pour vous. Espérons que cette capture d'écran suffira à illustrer ce que vous devez faire:

 Screenshot showing how to Set Permalinks in WordPress 
(source: mikeschinkel.com )

Faites-moi savoir si cela répond à votre question et si vous n'êtes pas coincé.

Autres réponses permanentes

De plus, il existe beaucoup d’autres réponses aux questions sur les liens permanents dans WordPress ici sur WordPress Answers; certains d'entre eux pourraient vous être utiles également, sans ordre particulier:

3
MikeSchinkel

J'ai fait tout ce que Jan Fabry a écrit, mais quand j'appelle:

http://www.mysite.com/customPostTypeSlug/page/id

Wordpress redirige (301) vers:

http://www.mysite.com/customPostTypeSlug/page

Ma règle est (appelée par une action "init"):

add_rewrite_rule(
        'customPostTypeSlug/page/([^/]+)/?' ,
        'index.php?customPostTypeSlug=page&id=$matches[1]',
        'top'
    );

Puis je le chasse.

Je change de permalien de %category%/%postname% à %postname% et semble fonctionner.

0
Merlinox