Auf einer Website, die mit einer gekauften Vorlage erstellt wurde, verfügte eine benutzerdefinierte Post-Type über eine Archivseite. Ich wollte diese Archivseite nicht, also änderte ich den benutzerdefinierten Post-Typ in einem Child-Theme wie folgt:
function remove_archive(){ $portfolio = get_post_type_object( 'portfolio' ); $portfolio->has_archive = FALSE; register_post_type( 'portfolio', $portfolio ); } add_action( 'init', 'remove_archive', 20 );
Dadurch wurde das benutzerdefinierte Post-Type-Archiv entfernt. Es war jedoch meine Absicht, dass die URL / das Portfolio für die Verwendung für eine Seite freigegeben wurde. Aber selbst nach dem Aktualisieren der Permalinks, Löschen von Caches usw. zeigt die URL nicht auf die Seite. Stattdessen zeigt es auf die Blog-Seite, die in den Einstellungen überhaupt nicht eingestellt wurde.
Die Lösung sollte eine Situation sein, in der /portfolio
eine Seite ist, und /portfolio/*
ist die URL-Struktur für die Posts. In diesem Moment funktioniert das jedoch nicht.
Fehle ich etwas?
Laut Pieter’s Kommentar habe ich den Vorlagenfilter template_include
hinzugefügt:
function uncode_redirect_page($original_template) { global $is_redirect; $is_redirect_active = ot_get_option('_uncode_redirect'); if ($is_redirect_active === 'on') { if(! is_user_logged_in() ) { $is_redirect = true; return get_template_directory() . '/redirect-page.php'; } } return $original_template; } add_filter('template_include', 'uncode_redirect_page');
Wenn Sie WordPress 4.4+ verwenden ( was Sie tun sollten ), können Sie den Parameter register_post_type_args
, um die Argumente anzupassen, die an register_post_type()
wenn der Post-Typ registriert wird. In Ihrem untergeordneten Thema können Sie Folgendes tun
add_filter( 'register_post_type_args', function( $args, $post_type ) { // Make sure we only target the portfolio post type if ( 'portfolio' !== $post_type ) return $args; /** * We are currently registering the portfolio post type, lets continue * For debugging purposes, you can do the following inside the filter * ?>
< ?php var_dump($args); ?>< ?php * * Modify the arguments as needed */ $args['has_archive'] = false; $args['rewrite'] = true; return $args; }, PHP_INT_MAX, 2);
Denken Sie daran, Ihre Umschreibungsregeln nach dem Hinzufügen des Filters zu löschen. Stellen Sie sicher, dass Sie den Filter an Ihre Bedürfnisse anpassen. Dies sollte sich um das Laden der Vorlage kümmern. Sie sollten die geladene Seite sehen, die Sie im
http://example.com/portfolio/
erstellt haben, wenn Siehttp://example.com/portfolio/
besuchen ( wenn Ihre erstellte Seite einen Ausschnitt desportfolio
, dh eine Permalink-Struktur) vonhttp://example.com/portfolio/
).Wenn dies nicht funktioniert, haben Sie etwas in Ihrem Thema, das dieses Problem verursacht, wahrscheinlicher eine
pre_get_posts
Aktion, die dieportfolio
Post-Typ-Seite als Ziel haben soll. Sie sollten auch ein schlechtes Neuschreiben beachtenBEARBEITEN
Das letzte Problem war, dass der
template_include
Filter, wie in der Frage erwähnt, das Problem verursacht hat. Durch das Entfernen des Filters im untergeordneten Thema und das erneute Einblenden der Permalinks wurde das Problem behoben
Die Archivseite wird nach dem Namen des Slugs vom Post-Typ erstellt. Wenn Sie also ein Portfolio als einfache Seite haben möchten, ändern Sie nicht die Archivseite, sondern nur die Art des Portfolio-Post-Typs. Es wird dein Problem lösen.
$labels = array( 'name' => _x( 'Blog', 'post type general name', 'your-plugin-textdomain' ), 'singular_name' => _x( 'Blog', 'post type singular name', 'your-plugin-textdomain' ), 'menu_name' => _x( 'Blog', 'admin menu', 'your-plugin-textdomain' ), 'name_admin_bar' => _x( 'Blog', 'add new on admin bar', 'your-plugin-textdomain' ), 'add_new' => _x( 'Add New', 'Blog', 'your-plugin-textdomain' ), 'add_new_item' => __( 'Add New Blog', 'your-plugin-textdomain' ), 'new_item' => __( 'New Blog', 'your-plugin-textdomain' ), 'edit_item' => __( 'Edit Blog', 'your-plugin-textdomain' ), 'view_item' => __( 'View Blog', 'your-plugin-textdomain' ), 'all_items' => __( 'All Blog', 'your-plugin-textdomain' ), 'search_items' => __( 'Search Blog', 'your-plugin-textdomain' ), 'parent_item_colon' => __( 'Parent Blog:', 'your-plugin-textdomain' ), 'not_found' => __( 'No Blog found.', 'your-plugin-textdomain' ), 'not_found_in_trash' => __( 'No Blog found in Trash.', 'your-plugin-textdomain' ) ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'test' ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt',) ); register_post_type( 'Blog', $args );