Question

J'utilise le plug-in UI Type de message personnalisé pour créer mes taxonomies personnalisées. J'ai un portefeuille composé de projets (type de poste personnalisé) avec 2 taxonomies personnalisées des technologies et des clients. La taxonomie des clients a une limace de réécriture personnalisée de portfolio/clients/, alors que la taxonomie des technologies a une limace de réécriture personnalisée de portfolio/

Réécriture:
portfolio/html <- page affiche tous les projets utilisant HTML
portfolio/clients/client-a <- page affiche tous les projets pour le client A

Maintenant, lorsque je tente de faire une page de destination pour les clients qui a une limace url de /portfolio/clients je reçois la page 404. Je suis sûr que ce soit à cause de conflit réécritures d'URL de la taxonomie des technologies. Je devine qu'il cherche dans la taxonomie de la technologie, il n'existe pas, il recrache la page 404. Alors, comment puis-je obtenir la limace de réécriture d'URL pour le travail de sorte que quand je frappe /portfolio/clients, il ne renvoie pas la page 404 et il utilise le modèle de page correcte?

Était-ce utile?

La solution

Vous semblez besoin « partielle bavard règles de réécriture ». réécrire verbeux désigne les règles toutes les pages sont mises sur le dessus parce que WordPress ne peut pas comprendre la différence entre une page et un poste. Ici, il pense qu'il peut, parce que toutes les URL de la forme portfolio/([^/]+)/ sont de votre taxonomie portfolio, sauf celui-ci portfolio/clients/. Vous devrez mettre que l'un au-dessus des règles de réécriture, de sorte qu'il corresponde avant la taxonomie de portefeuille plus générique. Vous pourriez probablement aussi la force toutes les règles de réécriture pour être bavard, mais qui aura un impact sur les performances si vous avez beaucoup de pages.

Cette réponse est écrite avec mon juste acquis la compréhension des règles de réécriture, je l'espère est une bonne façon de le faire et le code d'exemple ne contient pas trop d'erreurs.

Une page ne génère pas seulement une règle de réécriture, il génère un groupe:

  • (pagename)/trackback/?$
  • (pagename)/feed/(feed|rdf|rss|rss2|atom)/?$
  • (pagename)/(feed|rdf|rss|rss2|atom)/?$
  • (pagename)/page/?([0-9]{1,})/?$
  • (pagename)/comment-page-([0-9]{1,})/?$
  • (pagename)(/[0-9]+)?/?$

Vous ne devez pas créer ces soi-même, vous pouvez réutiliser la puissance de WP_Rewrite . Regardez sa méthode page_rewrite_rules() : si nous sommes en mode verbose , il obtient une liste de toutes les pages (via page_uri_index() ) et leurs pièces jointes, écrasent la balise de réécriture %pagename% et génère les règles de réécriture pour cette page. Nous pouvons le faire aussi:

// We only generate them for this page
$page_uri = 'portfolio/clients';
// Returns site root + '%pagename%'
$page_structure = $wp_rewrite->get_page_permastruct();
// Everywhere you see %pagename% in the structure used to generate rules
// in the next step, replace it with our fixed page name
$wp_rewrite->add_rewrite_tag('%pagename%', "({$page_uri})", 'pagename=');
// This generates the group given above
$page_rewrite_rules = $wp_rewrite->generate_rewrite_rules($page_structure, EP_PAGES);

Cela nous donnera les règles pour les pages, mais pas encore pour les accessoires de la page. Si vous voulez aussi les, vous répétez l'étape pour chaque pièce jointe, mais avec add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=') (voir page_rewrite_rules() pour plus de détails).

Bon, nous avons eu les règles, mais maintenant vous devez les ajouter à la structure de réécriture complète d'une certaine façon. Vous pouvez le faire avec add_rewrite_rule(), mais vous devez l'appeler pour chaque règle générée dans le tableau de $page_rewrite_rules. Pour cette raison, beaucoup de gens crochet dans le filtre rewrite_rules_array , puisque vous pouvez simplement modifier le tableau il.

add_filter('rewrite_rules_array', 'add_verbose_portfolio_clients_page');
function add_verbose_portfolio_clients_page($rewrite_rules)
{
    global $wp_rewrite;

    // The previous code snippet comes here, where we generate $page_rewrite_rules

    // Our rules have priority, they should be on top
    $rewrite_rules = array_merge($page_rewrite_rules, $rewrite_rules);

    return $rewrite_rules;
}

Après avoir inclus ce filtre, vous devez rincer les règles de réécriture (une fois, pas un seul chargement de chaque page, car il est assez lourd). Vous pouvez le faire en appelant flush_rewrite_rules(), ou en visitant la page des paramètres « permaliens ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top