it-swarm.com.de

Archivseite mit mehreren Taxonomien umschreiben

Ok, ich habe so ziemlich jede Antwort auf diese Frage durchgelesen, aber meine Situation muss irgendwie einzigartig sein.

Was ich versuche zu tun, ist in der Theorie einfach.

  • CPT: Ressource
  • Tax1: resource_type
  • Tax2: Industrie

Bei der Registrierung des CPT habe ich Folgendes eingestellt:

'rewrite' => array(
        'slug' => 'resources/%resource_type%',
        'with_front' => false
    ),

'with_front' => false, da die Standardbeiträge eine Basis verwenden.

Ich habe auch eine Seite von example.com/resources mit einer Vorlage von page-resources.php.

Bei der Registrierung von Tax1 habe ich Folgendes festgelegt:

'rewrite'  => array( 
        'slug' => 'resources',
        'with_front' => false
    )

Ich habe einen resource_type Begriff namens white-papers.

Dies erzeugt mein erstes gewünschtes Ergebnis eines Permalinks, der wie example.com/resources/white-papers/ für eine Taxonomie-Archivseite mit taxonomy-resource_type.php aussieht.

Hier wird es schwierig. Was ich versuche, ist das Hinzufügen einer zweiten Taxonomie (Tax2) und das Erstellen einer weiteren Archivseite mit einem Permalink von:

example.com/resources/white-papers/enterprise

Dieses Archiv ist eine Art gefiltertes Archiv, in dem nur die Posts angezeigt werden sollen, die resource_type = white-papers AND industry = enterprise lauten.

Stattdessen bekomme ich 404.

Wenn ich jedoch eine URL mit der Abfrage example.com/index.php?post_type=resource&resource_type=white-papers&industry=enterprise versuche, erhalte ich meine gewünschte gefilterte Archivseite.

Auch und ich bin nicht sicher, ob es für das Problem relevant ist oder nicht, aber ich habe diese Funktion ausgeführt:

function resources_cpt_generating_rule($wp_rewrite) {
  $rules = array();
  $terms = get_terms( array(
    'taxonomy' => 'resource_type',
    'hide_empty' => false,
  ) );

$post_type = 'resource';
foreach ($terms as $term) {    

    $rules['resources/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $post_type. '&resource_type=$matches[1]&name=$matches[1]';

}
// merge with global rules
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'resources_cpt_generating_rule');

Was ich brauche, ist die Umschreiberegeln, um dies zu erreichen.

Jede Hilfe wird im Voraus sehr geschätzt!

3
jedifunk

ok, also dachte ich, ich kehre zurück und beantworte meine eigene Frage, falls sie jemand anderem nützlich sein sollte.

Zum Starten des CPT:

'query_var' => true,
    'has_archive' => false,
    'rewrite' => array(
        'slug' => 'resources',
        'with_front' => false
    ),

Tax1:

'query_vars' => true,
    'rewrite' => array( 
        'slug' => 'resources/type',
        'with_front' => false
    )

Tax2:

'query_vars' => true,
'rewrite' => array(
        'with_front' => false
    )

Die Umschreibungen:

add_rewrite_rule( '^resources/type/([^/]*)/industry/([^/]*)/?$', 'index.php?post_type=resources&resource_type=$matches[1]&industry=$matches[2]', 'top' );

Dies führt zu einer etwas anderen URL-Struktur als ursprünglich beabsichtigt, und obwohl sie etwas ausführlicher ist, funktioniert sie meiner Meinung nach genauso gut.

example.com/resources = page-resources.php

example.com/resources/type/white-papers = taxonomy-resource_type.php für Steuer1 Begriff white-papers.

example.com/resources/type/white-papers/industry/enterprise = die gleiche taxonomy-resource_type.php-Archivvorlage, liefert jedoch nur die CPT-Ergebnisse von Tax1 AND Tax2.

Genau diese Funktionalität wollte ich erreichen.

3
jedifunk