Kombinieren mehrerer Taxonomien in einer URL

Ich erstelle eine komplexe Site mit einem Produktkatalog mit zwei benutzerdefinierten Taxonomien. Sie sind Marken und Typen.

Marken – Canon – Toshiba – HP

Typen – Drucker – Scanner – Multifunktion

Ich brauche eine Seite, die alle Produkte findet, die eine Kombination aus einer Marke und einem Typ sind. Die Marke ist die wichtigere von beiden, daher sollte sie als Marke -> Typ gefiltert werden (obwohl es ideal wäre, wenn dies austauschbar wäre).

Ich kann dies tun, indem ich die Abfrage basierend auf einem Parameter ändere, den ich am Ende der URL hinzufüge. Zum Beispiel könnte diese URL eine der folgenden sein:

  • http://www.example.com/brand/canon/?type=printers
  • http://www.example.com/brand/canon/?type=scanners
  • http://www.example.com/brand/canon/?type=multifunction
  • http://www.example.com/brand/toshiba/?type=printers
  • http://www.example.com/brand/toshiba/?type=scanners
  • http://www.example.com/brand/toshiba/?type=multifunction
  • http://www.example.com/brand/hp/?type=printers
  • http://www.example.com/brand/hp/?type=scanners
  • http://www.example.com/brand/hp/?type=multifunction

Aber mir wurde gesagt, das ist nicht gut für SEO-Zwecke. Im Idealfall möchte ich, dass die URL wie folgt strukturiert ist: http://www.example.com/brand/type/ . Dies würde zu folgenden URLs führen:

  • http://www.example.com/canon/printers
  • http://www.example.com/canon/scanners
  • http://www.example.com/canon/multifunction
  • http://www.example.com/toshiba/printers
  • http://www.example.com/toshiba/scanners
  • http://www.example.com/toshiba/multifunction
  • http://www.example.com/hp/printers
  • http://www.example.com/hp/scanners
  • http://www.example.com/hp/multifunction

Ja, ich weiß, dass ich Unterkategorien für jeden Produkttyp unter jeder Marke einrichten kann, aber ich muss auch in der Lage sein, alle Produkte unter jedem Produkttyp zu sehen, unabhängig von der Marke.

Übrigens, wenn die URL etwas komplexer sein muss (zB / brand / hp / type / multifunction /), ist das besser als nichts.

Gibt es einige Tricks mit Permalinks, die ich tun könnte, um die Links so zu strukturieren, wie ich sie brauche?

UPDATE 23.10.15: Ich habe gerade eine Stunde damit verbracht zu diagnostizieren, warum das auf der Seite, die ich aufgebaut habe, nicht mehr funktioniert. Es stellt sich heraus, dass ich die Standardabfrage mit einer benutzerdefinierten Abfrage für eine der Taxonomie-Archivvorlagen überschrieben habe. Um dies zu bekämpfen, können Sie Folgendes tun:

query_vars; ?>  

Solutions Collecting From Web of "Kombinieren mehrerer Taxonomien in einer URL"

Diese Rewrite-Regel sollte funktionieren (vorausgesetzt, “brand” und “type” sind die registrierten Namen der Taxonomie):

 function custom_rewrite_rules() { add_rewrite_rule('^brand/(.*)/type/(.*)?', 'index.php?brand=$matches[1]&type=$matches[2]', 'top'); } add_action('init', 'custom_rewrite_rules'); 

Denken Sie daran, die rewirte-Regeln nach dem Speichern dieses Codes in Ihrer Site zu löschen.

Dann müssen Sie mehrere Stellen einhängen, um Dinge zu reparieren . Beispielsweise müssen Sie wp_title , um den korrekten Titel für das Dokument zu generieren, z. B. “HP Drucker” oder nur “HP”, da dies nicht automatisch von WordPress gehandhabt wird. Ich kann nicht eine erschöpfende Liste von Dingen geben, die Sie reparieren müssen .

Während ich graben, um diesen zu beantworten, habe ich hier die folgende Umschreibfunktion gefunden:

 function eg_add_rewrite_rules() { global $wp_rewrite; $new_rules = array( 'user/(profession|city)/(.+?)/(profession|city)/(.+?)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4), 'user/(profession|city)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' ); 

Diese function verwendet eine URL wie: example.com/user/profession/designer,knight/city/athens,gotham/ und konvertiert sie in Variablen:

 $proffession = "designer,knight"; $city = "athens,gotham"; 

welches in der taxonomy.php verwendet werden kann

Weitere Informationen finden Sie unter https://stackoverflow.com/a/34624138/5594521

Arbeitsdemo: http://playground.georgemanousarides.com/

Ich hoffe es hilft!