Zwei benutzerdefinierte Taxonomien in Permalink-Struktur

Ich habe Probleme, eine benutzerdefinierte Permalink-Struktur mit benutzerdefinierten Taxonomien einzurichten. Ich habe hier viele Fragen / Antworten gelesen, aber ich kann es nicht zum Laufen bringen (am frustrierendsten ist, dass ich keine Möglichkeit kenne, das Problem zu debuggen und das Problem selbst zu finden). Jede Hilfe wird sehr geschätzt!

Was du wissen musst

  • Ich habe einen benutzerdefinierten Post-Typ namens items
  • items hat zwei benutzerdefinierte Taxonomien:
    • types und locations .
  • Jeder Artikel ist einem type und mehreren (1+) locations

Ich versuche, diese Linkstruktur für jeden item :

http://domain.com/type/location

wohingegen ich nur den ersten Lokalterm in dieser Verbindungsstruktur verwenden möchte.

Ich habe nicht versucht, den /location Teil der Link-Struktur zu implementieren (ich denke, das ist ein bisschen komplexer), da ich bereits mit dem /type/ Teil kämpfe. Also sieht mein Code momentan so aus und das führt zu keinen Änderungen in meinen Permalinks:

in einem Plugin

 register_post_type( 'item', array( 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', 'comments'), 'public' => true, 'has_archive' => true, 'rewrite' => true, 'menu_icon' => plugins_url( '/img/icon.png'), 'menu_position' => 42, 'categories' => array( ), ) ); register_taxonomy( 'types', 'item', array( 'labels' => $item_types_labels, 'hierarchical' => true, 'query_var' => 'type', 'rewrite' => true, 'public' => true, 'show_ui' => true, ) ); 

in functionen.php

 add_filter('post_link', 'types_permalink', 10, 3); add_filter('post_type_link', 'types_permalink', 10, 3); function types_permalink($permalink, $post_id, $leavename) { if (strpos($permalink, '%types%') === FALSE) return $permalink; // Get post $post = get_post($post_id); if (!$post) return $permalink; // Get taxonomy terms $terms = wp_get_object_terms($post->ID, 'types'); if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug; else $taxonomy_slug = 'no-type'; return str_replace('%types%', $taxonomy_slug, $permalink); } 

Ich habe meine Permalink-Struktur auf die benutzerdefinierte Struktur /%types%/%postname%/ . Meine URL sieht immer noch wie diese domain.com/item/postname .

Außerdem: Was auch immer ich für /item/ (z. B. domain.com/this-doesn-make-sense-to-me/postname ) domain.com/this-doesn-make-sense-to-me/postname , ich bekomme eine Weiterleitung zu domain.com/item/postname .

Solutions Collecting From Web of "Zwei benutzerdefinierte Taxonomien in Permalink-Struktur"

Erstes Problem – die Permalink-Struktur in den Einstellungen ist nur für den post post-Typ, also hat Ihre post_type_link -function kein %types% -Tag zu ersetzen.

Zweitens – es sei denn, Sie möchten eine sehr komplizierte (und weniger performante) Lösung, die einfachere Lösung besteht darin, ein statisches Präfix in Ihrem Post-Typ-Slug zu haben. Mit der URL http://domain.com/type/location/post-name/ kann WordPress nicht wissen, wonach Sie fragen. Geben Sie eine Seite mit untergeordneten Seitenspeicherorten ein, oder handelt es sich um einen Taxonomiebegriff für types ? Bei Verwendung des Standard-Rewrites-Systems hat immer eine Regel Vorrang und die anderen Anfragen immer 404. Mit dem URL-Format http://domain.com/item/type/location/post-name/ weiß WordPress genau, was Sie tun fragen, weil nur ein Beitragstyp mit dem item vorangestellt item .

Was die Besonderheiten anbelangt, setzen Sie in Ihrer Post-Typ-Registrierung das slug Argument des rewrite auf das Format der gewünschten URL:

 'rewrite' => array( 'slug' => 'item/%types%' ), 

… und Ihr post_type_link Filter sollte funktionieren. Wenn Sie Standorte hinzufügen möchten, fügen Sie einfach dieses Tag zum Slug hinzu und fügen Sie den Code zum Ersetzen des Tags in Ihrem post_type_link Filter hinzu.

 'rewrite' => array( 'slug' => 'item/%types%/%locations%' ),