Benutzerdefinierte URL-Umschreibung nach Beitragstyp?

32

Ich richte einen benutzerdefinierten Beitragstyp für meine Portfolio-Projekte ein. Die Haupt-URL dafür befindet sich unter/projects/

Jetzt habe ich auch meine Blog-Posts /articles/*/für die Permalink-Struktur eingerichtet. Das heißt, wenn ich ein Portfolio-Projekt betrachte, ändert sich die URL zu/articles/projects/project-name/

Ich weiß, dass es nur für den benutzerdefinierten Beitragstyp meines Projekts eine Möglichkeit geben muss, Permalinks umzuschreiben . Aber ich bin nicht mit der Syntax beim Deklarieren des URL-Slugs vertraut - würde mich über jede Hilfe freuen, die ich bekommen kann!

Jake
quelle

Antworten:

42

Wenn Sie den benutzerdefinierten Beitragstyp registrieren, müssen Sie angeben, dass der Umschreiberegel nicht die vorhandene URL-Struktur vorangestellt werden soll.

Kurz gesagt bedeutet dies, dass diese Zeile in Ihrem register_post_typeAnruf:

'rewrite' => array('slug' => 'projects'),

sollte folgendermaßen aussehen:

'rewrite' => array('slug' => 'projects','with_front' => false),

Weitere Informationen finden Sie im rewriteArgument aus dem Codex-Eintrag unterregister_post_type

Bearbeiten: Stellen Sie einfach sicher, dass Sie nach dem Aktualisieren des Codes die Umschreiberegeln löschen, indem Sie Einstellungen> Permalinks aufrufen. Ansonsten sehen Sie immer noch die alten Links.

0x61696f
quelle
genial danke! Um das zu verdeutlichen, muss ich nur zur Seite Einstellungen-> Permalinks gehen und auf "Änderungen speichern" klicken, richtig?
Jake
4
Sie müssen nicht einmal Änderungen speichern. Es reicht aus, nur die Seite mit den Permalinks-Einstellungen zu öffnen (dh, wenn Ihre .htaccess-Datei schreibbar ist. Wenn nicht, drücken Sie auf Änderungen speichern und kopieren Sie den Code, der in Ihrer .htaccess-Datei zurückgegeben wird, manuell.)
0x61696f
2
Das scheint bei mir nicht zu funktionieren. Meine Projekte werden noch veröffentlicht example.com/projects/title-of-post. Ich habe auch die Permalinks-Seite besucht. Was könnte das verursachen? Es gibt keine Umschreiberegeln in meinem htaccess.
Desi
Wow, danke das war der fehlende Teil! Der Besuch der Permalink-Seite hat nicht funktioniert, aber das SPEICHERN der aktuellen Permalink-Einstellungen hat funktioniert :)
Alexander Taubenkorb
Ich änderte die Dinge weiter, ohne die Umschreiberegeln zu löschen. Danke für den Tipp!
Tan-007
15

Ich hatte dieses Problem buchstäblich vor 3 Tagen, dann bin ich auf wp.tutsplus.com über eine Serie gestolpert . Ich habe meinen eigenen Code ausgetauscht, um Ihre Frage besser beantworten zu können, aber so kam es, nachdem ich der Serie gefolgt war. Denken Sie auch daran, dass dies nicht getestet ist.

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);

Theoretisch könnten Sie in der in der $projects_structureVariablen gespeicherten URL alles austauschen, was Sie wollen. Was da ist, ist genau das, was ich letztendlich verwendet habe.

Viel Glück und wie immer - kommen Sie wieder und teilen Sie uns mit, wie es funktioniert hat! :)

cmegown
quelle
1
Antworten, die nur aus Links bestehen, werden im Allgemeinen als nicht hilfreich angesehen, da diese Ressourcen in Zukunft möglicherweise nicht mehr vorhanden sind. Fassen Sie den Inhalt zusammen.
Chrisguitarguy
Fairerweise werde ich an einer korrekten Überarbeitung arbeiten.
Abendrot
11
Dort enthält meine Antwort jetzt einen ähnlichen Code wie der Arbeitscode, den ich in einer Produktionsumgebung habe, in der eine benutzerdefinierte URL für den Beitragstyp erfolgreich neu geschrieben wurde. Hoffe, es erweist sich als hilfreicher!
Abendrot