web-dev-qa-db-fra.com

Utilisation de "slug" personnalisé/dynamique pour une page

J'ai une page personnalisée qui utilise un modèle appelé "Stores" http://example.com/stores/. Cette page aura une liste d'états et/ou d'entreprises en tant que catégories. Pour ce système, j'ai un type de message personnalisé "magasin" qui peut être affecté à une seule catégorie (état ou société),

Chaque magasin n’est pas une page spécifique, mais des informations de contact qui sont affichées dans une sorte de disposition de style annuaire pour les États/sociétés.

Le problème que j'ai maintenant est, comment puis-je autoriser mon modèle "Stores" à accepter les demandes d'URL de http://example.com/stores/california/ (sans générer d'erreur 404)?

California en ce sens n'est pas une page, mais une requête. Je ne veux pas non plus créer manuellement une page pour chacune de ces catégories (telle qu'elle est extraite de la base de données et automatique). Je pourrais utiliser ?state=california à cette fin, mais j'aimerais savoir comment autoriser correctement cette URL dans WordPress.

Est-ce la bonne façon de modifier le fichier htaccess manuellement? Cela ne serait-il pas écrasé si vous modifiez la structure de lien permanent? Comment pourrais-je formater le htaccess?

4
Radley Sustaire

Créer un modèle de page

Ajouter une nouvelle page et lui donner le slug stores

Ajouter une variable de requête publique

add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars){
    $vars[] = 'state';
    return $vars;
}

Ajouter une règle de réécriture

Cela dirigera votre demande sur votre page stores.

add_rewrite_rule('^stores/([^/]*)/?','index.php?post_type=page&name=stores&state=$matches[1]','top');

Dans votre modèle

Vous pouvez accéder à votre variable d'état comme suit:

 $state = get_query_var('state');

Rincez vos liens permanents

Rendez-vous dans Paramètres-> Permaliens pour vider vos permaliens et ajouter votre règle de réécriture à la pile.

11
Brian Fegter

J'ai trouvé la réponse sur le site de Wordpress et j'ai testé la solution: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule#Using_Custom_Templates_with_custom_querystring

Créer un modèle de page

Créez un modèle de page pour les magasins et appliquez-le à une page.

$stores = get_query_var('stores');

Ajouter une étiquette de réécriture

Dans votre functions.php, ajoutez une balise de réécriture, qui indique à Wordpress de rechercher la balise spécifique.

function custom_rewrite_tag() {
  add_rewrite_tag('%stores%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

Ajouter une règle de réécriture

Maintenant, pour formater l’URL et le diriger vers le fichier index.php avec les variables, entrez les informations suivantes dans le fichier functions.php. Remarque: vous devez mettre à jour l'ID de page avec l'ID de page de la page des magasins (il s'agit de 12 dans cet exemple).

  function custom_rewrite_rule() {
    add_rewrite_rule('^stores/([^/]*)/?','index.php?page_id=12&stores=$matches[1]','top');
  }
  add_action('init', 'custom_rewrite_rule', 10, 0);

À partir de là, vous pouvez naviguer vers/stores/south-dakota/et la variable $ stores de votre modèle de page sera "south-dakota".

6
Jared Pomranky

J'essayais aussi de faire la même chose et je l'ai finalement fait de la manière suivante.

Ajoutez le code suivant à votre fichier functions.php dans votre thème.

add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars){
    $vars[] = 'state';
    return $vars;
}

add_rewrite_rule('^stores/([^/]+)/?$','index.php?pagename=stores&state=$matches[1]','top');

Dans votre modèle, obtenez la variable de requête en utilisant cette

$state = get_query_var('state');
1
Nayan