Das Umschreiben von benutzerdefinierten Taxonomien in Permalinks für Posts ergibt 404 Seiten

So habe ich eine benutzerdefinierte Taxonomie (genannt “Version”) für nur Beiträge , die gut funktioniert .. Mein Problem ist, dass ich diese Steuer in meinen Permalinks zB URL.com/12-3/cat/postname funktioniert auch gut für die Posts, wenn ich /%version%/%category%/%postname%/ für die Permalinks verwende.

ABER jetzt wirft mir jede Seite einen 404 Fehler auf .. (zB URL.com/test -> 404). Wenn ich /%version% entferne, funktioniert es gut .. aber nur für die Seiten .. aber ich brauche die Versionssteuer in der URL für die Beiträge. Der folgende Code wird für die Steuer-Slugs in den Permalinks verwendet:

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

Ich denke, ich habe einen dummen Fehler gemacht, von dem ich nicht weiß. Als ich den var_dump ($ wp) angeschaut habe; es zeigt mir zB (für URL.com/impressum):

 ["query_vars"]=> array(1) { ["version"]=> string(9) "impressum" } ["query_string"]=> string(17) "version=impressum" ["request"]=> string(9) "impressum" ["matched_rule"]=> string(10) "([^/]+)/?$" ["matched_query"]=> string(17) "version=impressum" ["did_permalink"]=> bool(true) 

also ist das ” version ” ding nur für Posts und nicht für Seiten registriert, aber es schaut immer noch nach oben … Ich habe keine Ahnung, das zu lösen, jede Hilfe oder weitere Einsichten werden sehr geschätzt 🙂

fyi die benutzerdefinierte Taxonomie:

 add_action('init', 'version_init'); function version_init() { if (!is_taxonomy('version')) { $labels = array( 'name' => __( 'Versionen'), 'singular_name' => __( 'Version'), 'search_items' => __( 'Versionen suchen' ), 'popular_items' => __( 'Oft genutzte Versionen' ), 'all_items' => __( 'Alle Versionen' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Version bearbeiten' ), 'update_item' => __( 'Version aktualisieren' ), 'add_new_item' => __( 'Neue Version hinzufuegen' ), 'new_item_name' => __( 'Neue Version hinzufuegen' ), 'add_or_remove_items' => __( 'Version hinzufuegen oder bearbeiten' ), 'choose_from_most_used' => __( 'Die meistgenutzte Versionen aussuchen' ), 'not_found' => __( 'Keine Versionen gefunden.' ), 'menu_name' => __( 'Versionen' ), ); $rewrite = array( 'slug' => '', 'with_front' => false, 'hierarchical' => false, ); register_taxonomy( 'version', 'post', array( 'hierarchical' => TRUE, 'labels' => $labels, 'public' => TRUE, 'show_ui' => TRUE, 'show_admin_column' => TRUE, 'update_count_callback' => '_update_post_term_count', 'query_var' => 'version', 'rewrite' => $rewrite ) ); } } 

Solutions Collecting From Web of "Das Umschreiben von benutzerdefinierten Taxonomien in Permalinks für Posts ergibt 404 Seiten"

Okay, ich habe es jetzt funktioniert .. Ich denke, es ist nicht sehr sauber, aber es funktioniert für mich ..

Zuerst slug ich den fehlenden slug im $rewrite für die register_taxonomy aber das war nicht wirklich das Problem.

  1. Da ich den dynamischen Wert an erster Stelle bekam (und brauche), habe ich eine leere Dummy-Hauptseite für meine Seiten erstellt, die ich zeigen und einfügen wollte. Ich nannte es content . (Nun, ich könnte einfach den Permalink manuell geändert haben, aber .. ich habe nicht)
  2. Jetzt wurde eine neue Rewrite-Regel hinzugefügt, damit die Seiten den richtigen query_string verwenden können

.

 function funny_unicorn_rewrite_rules() { add_rewrite_rule( '^content/([^/]*)/?$', // use "content" as prefix to identify my pages 'index.php?pagename=content%2F$matches[1]', // fix the query string 'top' ); } add_action('init','funny_unicorn_rewrite_rules'); 

Um dies zu schaffen, musste ich die Elternseite wieder in den String mit dem content%2F direkt vor den $matches[1]

Und natürlich löschte ich die Umschreiberegeln, nachdem ich die Änderungen vorgenommen hatte.

also die einzige Sache, die bleibt .. es wird nicht mit WPML arbeiten .. wenn ich eine Lösung dafür bekam, werde ich diesen Beitrag aktualisieren!

Prost