Mehrere Taxonomien, wie soll der Permalink aussehen?

Ich muss eine Liste eines benutzerdefinierten post_type implementieren, der in der Lage sein muss, sie nach zwei Taxonomien zu filtern,

Ich fand diese Antwort , die mit der wp_query Syntax hilft

Meine Frage ist nun, wie sollte die URL aussehen?

Der post_type: ad und die Taxonomien sind area und category

Aktuelle Beitrags-URL lautet:

/category/bikes , die funktionieren

oder

/ads/area/area-5 funktioniert

Aber wie soll ich den Slug für die Seite generieren, die nach category==bikes und area==area-5 filtert?

-BEARBEITEN-

Outside wp würde ich so etwas umschreiben (für dieses Beispiel):

/ads/(bikes|cars)/(area-5|area-3)

zu:

/posts.php?type=ads&category=bikes&area=area-5

Aber ich sehe nicht, wie man das in wp umgeht

Irgendwelche Ideen?

Vielen Dank!

Solutions Collecting From Web of "Mehrere Taxonomien, wie soll der Permalink aussehen?"

Gerade veröffentlicht heute ein Plugin namens Cortex , frei verfügbar auf GitHub . Sie benötigen PHP 5.4+ und Composer , um es zu installieren ( docs ).

Dieses Plugin ermöglicht das Schreiben von benutzerdefinierten “Routen” zu Abfragen, es basiert auf der Symfony-Routing-Komponente, so dass der Mechanismus zum Hinzufügen von Routen ähnlich ist.

Hier finden Sie vollständige Dokumente für Cortex.

Mit Cortex brauchen Sie nur eine einfache Route:

 add_action( 'brain_loaded', function() { Brain\Routes::add( '/ads/{cat}/{area}', 'cat_area_ad' ) ->requirements( [ 'cat' => '[az]+', 'area' => 'area-[0-9]+' ] ) ->query( function( $matches ) { return [ 'post_type' => 'ad', 'tax_query' => [ 'relation' => 'AND', [ 'taxonomy' => 'category', 'terms' => [ $matches['cat'] ], 'field' => 'slug' ], [ 'taxonomy' => 'area', 'terms' => [ $matches['area'] ], 'field' => 'slug' ] ] ]; } ); } ); 

"cat_area_ad" ist eine ID, die ich einer Route zugewiesen habe, die es ermöglicht, einfach eine URL für die Route zu erstellen (siehe Cortex-Dokumentation ):

 function get_cat_area_url( $cat = '', $area = '' ) { if ( did_action( 'parse_request' ) && ! empty( $cat ) && ! empty( $area ) ) { if ( strpos( $area, 'area-' ) !== 0 ) { $area = 'area-' . $area; } return Brain\Routes::url( 'cat_area_ad', [ 'cat' => $cat, 'area' => $area ] ); } else { return home_url(); } } 

Vorherige function ermöglicht es, eine URL für die Route zu erhalten, aber sowohl Bereich als auch Kategorie müssen als functionsargumente übergeben werden.

Sobald das Lesen von OPs scheint, dass “Gebiets” -Begriffe in der Form "area-XX" (wobei ‘XX’ eine Zahl ist), machte ich die Route dieses Format erforderlich und ich machte auch die get_cat_area_url -function automatisch “Bereich-” dem Bereich voranstellen Zeichenfolge, die als Argument übergeben wurde (falls nicht bereits vorhanden), sodass Sie sie wie folgt verwenden können:

 $url = get_cat_area_url( 'bikes', '5' ); echo $url; // will be: example.com/ads/bikes/area-5 

get_cat_area_url function get_cat_area_url funktioniert nur dann richtig, wenn der 'parse_request' Hook ausgetriggers wurde (aufgrund einer Einschränkung der Cortex URL () API Methode ), aber in jeder Template Datei kann sie ohne Probleme verwendet werden, da bei einem Template dieser Hook immer ausgetriggers wurde .