Permalinks bei Verwendung von benutzerdefiniertem Posttyp mit statischer Seite für die Archivierung

Ich habe einen benutzerdefinierten Post-Typ namens “portfolio” erstellt und verwende eine statische Seite, um meine Portfolio-Posts aufzulisten, da ich Inhalte mit dem Inhalts-Editor hinzufügen muss.

Mein Problem ist, dass ich diese Struktur gerne hätte:

http://www.example.com/portfolio/ (Es ist eine statische Seite)

http://www.example.com/portfolio/photography (Taxonomiebegriff)

http://www.example.com/portfolio/photography/post-title (einzelner Posttyp)

Ist es möglich?

Wie kann ich es tun?

Solutions Collecting From Web of "Permalinks bei Verwendung von benutzerdefiniertem Posttyp mit statischer Seite für die Archivierung"

Ja, es ist möglich, und es wird getan, indem die benutzerdefinierte Taxonomie erstellt wird, dann das Umschreiben in dem benutzerdefinierten Post-Typ erstellt wird und dann ein Filter für post_type_link , um den tatsächlichen Permalink zu bearbeiten. Sobald Sie den Code installiert haben, gehen Sie auf Einstellungen> Permalinks und drücken Sie auf Senden, um alles zu aktualisieren.

 add_action( 'init', 'register_custax_type', 0 ); function register_custax_type() { // Add new hierarchical taxonomy $labels = array( 'name' => _x( 'Types', 'taxonomy general name' ), 'singular_name' => _x( 'Type', 'taxonomy singular name' ), 'search_items' => __( 'Search Types' ), 'all_items' => __( 'All Types' ), 'parent_item' => __( 'Parent Type' ), 'parent_item_colon' => __( 'Parent Type:' ), 'edit_item' => __( 'Edit Type' ), 'update_item' => __( 'Update Type' ), 'add_new_item' => __( 'Add New Type' ), 'new_item_name' => __( 'New Type Name' ), 'menu_name' => __( 'Type' ), ); $args = array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'public' => true, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'portfolio' ) ); register_taxonomy( 'type', array( 'portfolio' ), $args ); } add_action( 'init', 'register_cpt_portfolio' ); function register_cpt_portfolio() { $labels = array( 'name' => _x( 'Portfolios', 'portfolio' ), 'singular_name' => _x( 'Portfolio', 'portfolio' ), 'add_new' => _x( 'Add New', 'portfolio' ), 'add_new_item' => _x( 'Add New Portfolio', 'portfolio' ), 'edit_item' => _x( 'Edit Portfolio', 'portfolio' ), 'new_item' => _x( 'New Portfolio', 'portfolio' ), 'view_item' => _x( 'View Portfolio', 'portfolio' ), 'search_items' => _x( 'Search Portfolios', 'portfolio' ), 'not_found' => _x( 'No Portfolios found', 'portfolio' ), 'not_found_in_trash' => _x( 'No Portfolios found in Trash', 'portfolio' ), 'parent_item_colon' => _x( 'Parent Portfolio:', 'portfolio' ), 'menu_name' => _x( 'Portfolios', 'portfolio' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'description' => 'Portfolios', 'supports' => array( 'title', 'revisions', 'editor', 'thumbnail' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 25, 'menu_icon' => 'dashicons-images-alt', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => true, 'has_archive' => false, 'query_var' => true, 'can_export' => true, 'capability_type' => 'page', 'taxonomies' => array( 'type' ), 'rewrite' => array( 'slug' => 'portfolio/%type%', 'with_front' => false ) ); register_post_type( 'portfolio', $args ); } add_filter( 'post_type_link', 'portfolio_permastruct', 10, 2 ); function portfolio_permastruct( $link, $post ) { // Only update portfolio permalinks if( $post->post_type !== 'portfolio') return $link; // get terms, if none are returned, it's false and just returns if( $cats = get_the_terms( $post->ID, 'type' ) ) $link = str_replace( '%type%', array_pop( $cats )->slug, $link ); return $link; } 

Ein vollständiger Spaziergang kann hier gefunden werden

Dies könnte als Workaround dienen. Versuchen Sie, den Namen Ihres Post-typs von “Portfolio” in “Arbeit” oder “Beispiele” zu ändern. Es muss nur ein Wort sein, das für Sie einen Sinn ergibt.

Ändern Sie dann den Namen Ihrer Taxonomie von “Typ” in “Portfolio”.

Ich denke, WordPress zeigt standardmäßig die Beziehung des Begriffs zur Taxonomie an, da es Beispiele geben könnte, in denen Sie denselben Begriff in verschiedenen Taxonomien verwenden.

Stellen Sie sich zum Beispiel eine Website Liste Buchbesprechungen vor. Der benutzerdefinierte Post-Typ könnte “Bücher” sein

Sie könnten auch Taxonomien wie “Autor-Nachname, Genre, Sprache, etc.” haben

Wenn Sie ein Buch über Vampire von einem Autor namens Jim English hätten, würden Sie den Begriff Englisch sowohl in der Autorennamens- als auch in der Sprachtaxonomie verwenden. In diesem Fall würde http://www.example.com/author-last-name/English alle Autoren mit dem Namen Englisch auflisten, während http://www.example.com/language/English alle Bücher auf Englisch auflisten würde.

Wenn Sie etwas wie http://www.example.com/books/English erstellen könnten, wäre das verwirrend. In der Theorie wären das alle Bücher in Englisch und alle Bücher von Autoren mit dem Namen Englisch und das würde wahrscheinlich eine spezielle Abfrage benötigen.

Mir ist klar, dass dieses Beispiel ein wenig verschachtelt ist, aber ich denke, das ist der Grund, warum WordPress sich so verhält, wie es ist.