Unterschiedlicher Permalink für CPT und normale Posts / Seiten aber warum?

Permalink-Struktur im Backend: http://domain.com/%year%/%category%/%postname%

Für “normale” Beiträge / Seiten ist alles in Ordnung, aber sobald ein CPT angezeigt wird %year% ist weg?

URL angezeigt für Posts / Pages sieht etwa so aus: http://domain.com/2014/category01/regular-post001
URL angezeigt für CPT sieht etwa so aus: http://domain.com/category01/cpt-post002

Am seltsamsten (für mich) ist, wenn ich gebe (für diesen CPT) http://domain.com/2014/category01/cpt-post002 zeigt es die CPT ABER dann lässt / redirect auf die URL ohne 2014 (Jahr) .

Was vermisse ich / mache ich falsch?

Solutions Collecting From Web of "Unterschiedlicher Permalink für CPT und normale Posts / Seiten aber warum?"

Die Permalink-Konfiguration in WordPress Backend ist nur für Standard-Posts und Seiten. Für CPT lautet die Standard-URL-Struktur http://example.com/cpt-identifier/post-slug . Wenn Sie für Ihre CPT eine andere URL-Struktur wünschen, müssen Sie Ihre eigenen Umschreibungsregeln definieren und registrieren.

Beispielsweise:

 add_action( 'init', 'register_posttype' ); function register_posttype() { register_post_type( 'my_cpt', //this will be in the URL as CPT identifier array( 'labels' => array( 'name' => __( 'My Custom Post Types' ), 'singular_name' => __( 'Custom Post Type' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'products'), //This will override the CPT identifier ) ); } 

Wenn Sie ein dynamisches Tag in die URL-Struktur Ihres CPT aufnehmen möchten, wie Jahr, müssen Sie Ihre eigenen Rewrite-Regeln und den Permalink-Filter definieren:

 add_action( 'init', 'register_posttype' ); function register_posttype() { register_post_type( 'my_cpt', //this will be in the URL as CPT identifier array( 'labels' => array( 'name' => __( 'My Custom Post Types' ), 'singular_name' => __( 'Custom Post Type' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => '%year%/my_cpt'), //This will override the CPT identifier ) ); } add_filter('post_type_link', 'modify_permalink'); function modify_permalink($url, $post = null) { // limit to certain post type. remove if not needed if (get_post_type($post) != 'my_cpt') { return $url; } elseif(!is_object($post)) { global $post; } $url = str_replace("%year%", get_the_date('Y'), $url); return $url; } add_action('init','my_add_rewrite_rules'); function my_add_rewrite_rules() { add_rewrite_rule('([0-9])/my_cpt/(.+)/?$', 'index.php?post_type=my_cpt&post=$matches[1]', 'top' ); }