Entfernte benutzerdefinierte Post-Typ-Archivseite zeigt Blog-Seite an

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?

Bearbeiten

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'); 

Solutions Collecting From Web of "Entfernte benutzerdefinierte Post-Typ-Archivseite zeigt Blog-Seite an"

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 Sie http://example.com/portfolio/ besuchen ( wenn Ihre erstellte Seite einen Ausschnitt des portfolio , dh eine Permalink-Struktur) von http://example.com/portfolio/ ).

Wenn dies nicht funktioniert, haben Sie etwas in Ihrem Thema, das dieses Problem verursacht, wahrscheinlicher eine pre_get_posts Aktion, die die portfolio Post-Typ-Seite als Ziel haben soll. Sie sollten auch ein schlechtes Neuschreiben beachten

BEARBEITEN

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 );