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!

%d Bloggern gefällt das: