it-swarm.com.de

Wie filtere ich Archive nach Kategorie und Tag?

Ich habe ein Archiv für jede Kategorie/Tag. Jetzt möchte ich ein benutzerdefiniertes Archiv mit der folgenden URL-Struktur erstellen:

http://example.com/cat1/subcat1/tag/tag1

Dies sollte alle Posts anzeigen, die das Tag tag1 haben und zu cat1 und subcat1 gehören.

Wie kann ich dieses Archiv erstellen?

1
Diaa

Was Sie suchen, ist eine benutzerdefinierte Suche, die über Umschreiberegeln erstellt werden kann. Ich werde eine Regel erstellen, die der URL einige Abfragen hinzufügt.

Definieren wir zunächst ein Umschreibetag, damit WordPress unsere benutzerdefinierte URL erkennt.

function my_rewrite_tag() {
  add_rewrite_tag('%custom-categories%', '([^&]+)');
}
add_action('init', 'my_rewrite_tag', 10, 0);

Jetzt erstellen wir eine Regel, um unsere Daten auf einen anderen Pfad umzuleiten.

function my_rewrite_rule() {
  add_rewrite_rule(
      '^custom-categories/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?',
      'index.php?post_type=post&customCat=$matches[1]&customSubCat=$matches[2]&customTag1=$matches[3]&customTag2=$matches[4]',
      'top'
  );
}
add_action('init', 'my_rewrite_rule', 10, 0);

Wenn wir also versuchen, auf Folgendes zuzugreifen:

http://example.com/custom-categories/cat1/subcat1/tag/tag1

wir werden weitergeleitet an:

http://example.com/index.php?post_type=post&customCat=cat1&customSubCat=subcat1&customTag1=tag&customTag2=tag1

Welches ist das Archiv für normale Beitragstypen. Jetzt ist der Trick. Wir werden die Abfrage ändern, wenn diese Daten gesetzt sind:

// We only want to do this if every data is set, so let's check for them all
if(isset($_['customCat']) && isset($_['customSubCat']) && isset($_['customTag1']) && isset($_['customTag2'])) {
    // Now alter the main query
    function photogram_include_blog_posts($query) {
        if ( !is_admin() && $query->is_main_query() && $query->is_archive() ) {
            // Set the tags
            $query->set('tag__in', array($_['customTag1'],$_['customTag2']));
            // Set the categories
            $query->set('category__in', array($_['customSubCat'],$_['customCat']));
        }
    }
    add_action( 'pre_get_posts', 'photogram_include_blog_posts' );
}

Daher werden wir zu einer Archivseite weitergeleitet, auf der unsere benutzerdefinierte Abfrage ausgeführt wird. Erledigt.

0
Jack Johansson