it-swarm.com.de

Mehrere Taxonomien in einer URL kombinieren

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

Marken - Canon - Toshiba - HP

Typen - Drucker - Scanner - Multifunktionsgeräte

Ich brauche eine Seite, die alle Produkte findet, die eine Kombination aus einer Marke und einem Typ darstellen. Die Marke ist die wichtigere der 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 anhand eines Parameters ändere, den ich am Ende der URL hinzufüge. Diese URL kann beispielsweise eine der folgenden sein:

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

Ja, ich weiß, dass ich Unterkateogire für jeden Produkttyp unter jeder Marke einrichten kann, aber ich muss auch in der Lage sein, alle Produkte unter jedem markenunabhängigen Produkttyp anzuzeigen.

Übrigens, wenn die URL etwas komplexer sein muss (d. H./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 lang versucht zu diagnostizieren, warum dies auf der von mir erstellten Site nicht mehr funktioniert. Es stellte sich heraus, dass ich die Standardabfrage mit einer benutzerdefinierten Abfrage in einer der Taxonomie-Archivvorlagen überschrieben habe. Um dem entgegenzuwirken, können Sie Folgendes tun:

<?php $tax_query = $wp_query->query_vars; ?>
<?php
if ($tax_query["types"] && $tax_query["brands"]) {
    // default query stuff here
} else {
    // custom query stuff here
}
?>
6
JacobTheDev

Diese Umschreiberegel sollte funktionieren (unter der Annahme, dass "Marke" und "Typ" die registrierten Taxonomienamen sind):

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 zu löschen, nachdem Sie diesen Code auf Ihrer Site gespeichert haben.

Dann müssen Sie sich an mehreren Stellen an fix things einhängen. Beispielsweise müssen Sie möglicherweise wp_title einbinden, um den richtigen Titel für das Dokument zu generieren, z. B. "HP Drucker" statt "HP", da dies von WordPress nicht automatisch verarbeitet wird. Ich kann keine vollständige Liste der Dinge geben, die Sie benötigen, um zu beheben .

8
cybmeta

Beim Ausgraben, um diesen zu beantworten, fand ich hier die folgende Funktion zum Umschreiben:

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 Funktion 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: https://stackoverflow.com/a/34624138/5594521

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

Ich hoffe es hilft!

2
gmanou