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:
UPDATE
J'ajoute quelques informations supplémentaires pour clarification.
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:
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;
}
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?
.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.)
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.
(source: mikeschinkel.com )
Passons maintenant à vos questions.
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.)} _
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:
(source: mikeschinkel.com )
Faites-moi savoir si cela répond à votre question et si vous n'êtes pas coincé.
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:
Configuration de WordPress avec des permaliens personnalisés et aucun fichier .htaccess?
WordPress remplace les variables GET, (page_id) définies dans HTACCESS?
Règle de réécriture du type de message personnalisé pour l'auteur et la pagination?
Création de 301 redirections pour les URL de publication, page, catégorie et image?
Forcer l'URL du site Web à inclure "www" et à être en majuscule?
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.