Es gibt viele Seiten mit Informationen zum Ändern des Slugs für den custom post type project im Divi Theme. Steht es doch auch in der Doku von Elegant Themes und das schreibt man dann einfach ab ?
Ändern des Slugs für ein Projekt in Divi.
/* at the end of your functions.php */ add_filter( 'et_project_posttype_rewrite_args', function() { return [ 'feeds' => true, 'slug' => '**referenz**', 'with_front' => false ]; });
Die oft daneben gestellte Frage ist:
„Wie kann ich dann den Projekt-Kategorie-Slug ändern?“
Hier die Antwort:
/* at the end of your functions.php */ add_filter( 'register_taxonomy_args', function($args, $taxonomy, $array_object_type) { if ($taxonomy == "project_category") { $args['rewrite']['slug']="**referenzen**"; } return $args; }, 10, 3);
Bitte dann Permalink-Struktur in den Settings speichern! Es muss nichts verändert werden, nur speichern. Dann werden die Routen neu berechnet.
Warum schreibe ich dazu jetzt einen Post? Steht ja sicher wo im Netz?
Nicht wirklich, und weil ich dir gern zeigen will wie man sowas selber finden kann wenn du es nicht im Netz findest. Ich stell mir nämlich oft die Frage:
Wie kommt man auf sowas?
Das ist das Schöne an offenen Sourcen, man kann alles nachlesen!
Öffnest du die Kategorien erkennst du im Browser am URL /wp-admin/edit-tags.php?taxonomy=project_category&post_type=project, dass es sich um eine custom taxonomy handelt. Vor Divi war die nicht da, also muss sie irgendwo im Template installiert werden.
Also durchsuchst du den Source von Divi nach genau diesem String und findest die entsprechende Zeile
grep -ri project_category wp-content/themes/Divi/ # ... #wp-content/themes/Divi/includes/builder/core.php: register_taxonomy( 'project_category', array( 'project' ), array( # ...
Dann schaust du dir den Source dort an
register_taxonomy( 'project_category', array( 'project' ), array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, ) );
Hier fällt dir auf, dass es keinen eigenen Filter, wie es bei dem Slug der einzelnen Projekte, gibt. Dort gibt es in Divi den et_project_posttype_rewrite_args Filter, den du gesondert für genau den Fall hernehmen kannst.
Jetzt könntest du sagen,
gut, ich kann jetzt nach „how to change taxonomy slug“ oder sowas suchen…
Aber wenn du schon im Source bist, schaust du gleich ob du noch mehr Informationen rausholen kannst. Nur Leute die sich auch für den Hintergrund interessieren, können auch mit einem System gut umgehen. Deswegen könnte ich auch nicht in jeder Programmiersprache und jedem Framework ein Profi sein – das wäre viel zu viel Information.
Also suchst du jetzt nach dieser register_taxonomy Funktion
grep -rni 'function register_taxonomy' . #./wp-includes/taxonomy.php:371:function register_taxonomy( $taxonomy, $object_type, $args = array() ) {
In der Funktion steht dann
$taxonomy_object = new WP_Taxonomy( $taxonomy, $object_type, $args ); $taxonomy_object->add_rewrite_rules();
Also muss das Rewrite diese WP_Taxonomy Klasse übernehmen. Weiter geht die Suche
grep -rni 'class WP_Taxonomy' . #./wp-includes/class-wp-taxonomy.php:15:final class WP_Taxonomy {
In der add_rewrite_rule Funktion steht dann irgendwas mit
add_permastruct( $this->name, "{$this->rewrite['slug']}/%$this->name%", $this->rewrite );
Das schaut gut aus. Die Variable $this->rewrite[’slug‘] muss irgendwo befüllt werden, meistens in der __construct Funktion der Klasse.
Und dort findest du auch den Verweis auf eine set_props Funktion, die gleich darunter diese Rewrite-Variable befüllt.
Die einfachste Möglichkeit, wie du hier hier eingreifen kannst, ist die folgende Zeile
$args = apply_filters( 'register_taxonomy_args', $args, $this->name, (array) $object_type );
Weiter unten in der Funktion siehst du, dass der Slug für das Rewrite mit dem Namen der Taxonomie befüllt wird, wenn kein anderer gesetzt wird (was in unserem Fall so ist)
if ( false !== $args['rewrite'] && ( is_admin() || '' != get_option( 'permalink_structure' ) ) ) { $args['rewrite'] = wp_parse_args( $args['rewrite'], array( 'with_front' => true, 'hierarchical' => false, 'ep_mask' => EP_NONE, ) ); if ( empty( $args['rewrite']['slug'] ) ) { $args['rewrite']['slug'] = sanitize_title_with_dashes( $this->name ); } }
Also musst du in dem register_taxonomy_args Filter diese Variable setzen und zwar nur für die entsprechende Taxonomie.
Das ist das Ergebnis des ganz oben angeführten Source-Snippets.
War doch gar nicht so schwer und geht oft schneller als googeln – außer man weiß, wonach man sucht!
Merci 🙂
Leider hat das bei mir nicht funktioniert und hat zahllose Fehler produziert, sobald ich auf Projekte klicke. Vermutlich hat sich beim Theme etwas geändert?
Auf einer anderen Seite habe ich allerdings das passende für mich gefunden. Einzutragen in die functions.php im Child-Theme, wobei der Begriff „project“ einfach durch den Begriff zu ersetzen ist, der gewünscht ist.
Der Code lautet wie folgt:
// URL FUER PROJECTS ANPASSEN
function custom_post_name () {
return array(
‚feeds‘ => true,
’slug‘ => ‚project‘,
‚with_front‘ => false,
);
}
add_filter( ‚et_project_posttype_rewrite_args‘, ‚custom_post_name‘ );
// ENDE DER ANPASSUNG
Hallo Rafael,
danke für dein Kommentar. Ich denke, du hast hier was verwechselt. Denn was du da gemacht hast, steht ganz oben im Post. Das findet man eh überall. Hier geht es um den Slug für die Projekt-Kategorie.
Wenn das bei dir einen Fehler wirft, dann hast du eventuelle eine alte PHP Version (mein Source ist für PHP 5.3+). ODER du hast vergessen die Permalinkstruktur einmal neu zu speichern.
Ich hab das jetzt testweise auf einer komplett neuen Installation versucht (Divi 3.8.1 und WP 4.9.6) – geht noch immer ganz gleich.
Schöne Grüße
Moin,
wie würde das funktionieren, wenn man eine mehrsprachige Seite hätte und jeweils der slug entsprechend übersetzt sein soll.
Gruß
Wolfram
Du meinst WPML?
Hier solltest du gar nicht viel brauchen.. hab es aber ehrlich gesagt nicht versucht.
https://wpml.org/forums/topic/translated-url-slugs-now-all-throw-a-404-not-found-for-cpt-books/#post-1241762
Hier steht, dass man solche Slugs anscheinend in den Settings anpassen kann…
Irgendwo auf https://yourdomain.com/wp-admin/admin.php?page=sitepress-multilingual-cms%2Fmenu%2Ftaxonomy-translation.php
Hallo Alexander,
Zunächst einmal vielen Dank für Ihre Hilfe. Ich habe lange gesucht, um dies zu ändern, aber ich habe ein Problem. Ich habe es geschafft, den Begriff der Schnecke in „Sektor“ zu ändern, aber wenn ich zur Kategorie gehe, wird ein 404-Fehler angezeigt.
Ich habe die Permalinks nach der Änderung erneut gespeichert, aber sie werden immer noch nicht gut angezeigt.
Kannst du mir bitte helfen?
Vielen Dank!
Wenn du das alles gemacht hast, cache geleert usw. kann ich dir mur helfen, wenn ich Zugang zum Admin (und zur Not FTP) hab. Kann auch sein, dass es mir der aktuellen Divi Version gar nicht mehr geht?!
Es ist möglich, ich weiß es nicht. Es ist eine Schande, weil ich bereits sage, dass sich der Begriff geändert hat. Ich bin sehr dankbar für Ihre Hilfe, aber ich ziehe es vor, die Schlüssel nicht weiterzugeben. Grüße!
Hallo Alexander,
Ich denke immer darüber nach, dieses Problem zu lösen. Der richtige Code ist das richtig?:
/* at the end of your functions.php */
add_filter( ‚register_taxonomy_args‘, function($args, $taxonomy, $array_object_type) {
if ($taxonomy == „project_category“) {
$args[‚rewrite‘][’slug‘]=“**referenzen**“;
}
return $args;
}, 10, 3);
Dankeschön
ja, das ändert den slug der taxonomie. was hast du denn genommen als **referenzen** ?
wo gehen deine links dann hin und hast du andere plugins installiert, die eventuell auswirkungen haben wie Wpml?
Der Begriff, den ich anstelle von ** referenzen ** verwendet habe, ist „Sektor“. Ich habe kein Plugin, das im Prinzip Fehler verursachen kann. Das Web ist noch nicht indiziert. Glaubst du, das könnte das sein?
Vielen Dank.
Also, indizierung und Url-Struktur haben nichts miteinander zu tun. Schreib mir einfach ein eMail mit der Web-Seite ( Domain ) und ich schau mal rauf.
Wenn der generische Ansatz nicht funktioniert, muss man die Details anschauen. Wenn du mir keinen Zugang oder nicht mal die Seite schicken kannst, dann kann ich dir auch nicht helfen.
Hallo Alexander,
Ich habe Ihnen gerade per E-Mail geschrieben, um Ihnen das Web zu senden, und ich sehe, dass es bereits richtig funktioniert. Ich denke, das Problem, dass es nicht aktualisiert wurde, war, weil die Website unter Wartung war.
Nochmals vielen Dank für Ihre Hilfe!