Post-Archive wie eine Seite in einem bestimmten Unterverzeichnis

Ich habe eine Webseite mit Posts, die zu bestimmten Kategorien gehören (zB Projekte ). Ich möchte das Archiv einer bestimmten Kategorie wie eine Seite anzeigen.

Status Quo

Die Site-Struktur ist ähnlich wie folgt:

/
/unsere Arbeit/
/ our-work / projects <- hier möchte ich das Archiv für Projekte haben
/ xyz
/ …

Ich benutze die folgenden Einstellungen:

  • category_base = Katze
  • permalink_structure = / news /% kategorie% /% postname% /

Ich kann auf das Projektarchiv über example.com/cat/projects zugreifen.

Was ich schon probiert habe

Ich habe folgendes ohne Erfolg versucht:

Entfernen Sie eine page_for_posts und setzen Sie sie auf eine neu erstellte Seite ” news “.

Einschließen des folgenden Codes in die .htaccess-Datei vor dem WordPress-Abschnitt (mit und ohne [L] : Wenn ich [L,r=301] bekomme ich eine 301-Umleitung.

  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/our-work/projects/$ /cat/projects/  

Ich denke, es gab eine Zeit, in der es irgendwie funktionierte, aber ich kann mich nicht erinnern, wie ich es gemacht habe. (Vielleicht hat die Seite nur alle Beiträge angezeigt, weil sie keine anderen Informationen hatte).

Meine Fragen

  1. Gibt es einen besseren Weg, dies zu tun? Wie? (Ich denke über das Erstellen einer realen Seite und wring einen Shortcode, der alle Beiträge in der Kategorie Projekte enthält / zeigt)
  2. Wenn nicht – Wie kann ich das tun?
  3. Ist es möglich, die Beiträge dieser Kategorie in diesem “Unterverzeichnis” wie / our-work / projects / acme zu haben ?

Solutions Collecting From Web of "Post-Archive wie eine Seite in einem bestimmten Unterverzeichnis"

Sie können einen benutzerdefinierten Beitragstyp mit einer benutzerdefinierten Slug-Permalink-Struktur registrieren.

 $args = array( 'rewrite' => array( 'slug' => 'our-work/book' ), ); register_post_type( 'projects', $args ); 

Die Antwort von Tylor hat fast funktioniert. Ich musste zumindest die arraykeys has_archive und public auf true setzen / our-work / projects /

 $args = array( 'label' => 'projects', 'description' => 'Projects', 'rewrite' => array( 'slug' => 'our-work/projects' ), 'has_archive' => true, //so I can use /our-work/projects/ (archive) 'public' =>'true', //otherwise it included other posts in the archive 'show_ui' => true, //to see it in the admin menu ); register_post_type( 'projects', $args ); 

Ich musste auch flush_rewrite_rules() einmal aufrufen, um die Permalink-Struktur zu aktualisieren (siehe https://codex.wordpress.org/Function_Reference/register_post_type#Flushing_Rewrite_on_Activation für Details).