Wenn Sie benutzerdefinierte Beitragstypen manuell registrieren, ermöglicht WordPress es Ihnen, einen eigenen Archiv-Slug festzulegen. Wie Sie dies konfigurieren, bestimmt, ob der Slug in Ihre Sekundärsprache übersetzt wird oder nicht.
Wenn Sie benutzerdefinierte Beitragstypen manuell registrieren (wird in einem neuen Tab geöffnet), können Sie mithilfe der Funktion has_archive einen eigenen Archiv-Slug festlegen.
WPML ermöglicht es, has_archive auf einen String zu setzen. Wenn der String-Wert jedoch auf etwas anderes als rewrite['slug'], gesetzt wird oder der Namens-Slug des benutzerdefinierten Beitragstyps nicht festgelegt ist, ist der Archiv-Slug nicht übersetzbar.
Einen übersetzbaren Slug festlegen
In diesem Code-Beispiel setzen wir
'has_archive' => true. Unter der Annahme, dass der Slug book im Spanischen mit libro übersetzt wurde, lauten die Archiv-Links wie folgt:
- Englisch (Standardsprache): http://mydomain.tld/book/
- Spanisch (Sekundärsprache): http://mydomain.tld/es/libro/
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'book',
array(
'labels' => array(
'name' => __( 'Books', 'textdomain' ),
'singular_name' => __( 'Book', 'textdomain' )
),
'public' => true,
'has_archive' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'book'),
'supports' => array('title','editor', 'custom-fields','thumbnail')
)
);
}
Den gleichen Slug in der Standardsprache und der Sekundärsprache festlegen
In diesem Code-Beispiel legen wir einen spezifischen String für den Parameter'has_archive' => 'my-books' fest. Nun lauten die Archiv-Links wie folgt:
- Englisch (Standardsprache): http://mydomain.tld/my-books/
- Spanisch (Sekundärsprache): http://mydomain.tld/es/my-books/
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'book',
array(
'labels' => array(
'name' => __( 'Books', 'textdomain' ),
'singular_name' => __( 'Book', 'textdomain' )
),
'public' => true,
'has_archive' => 'my-books', // Do not use the gettext functions for this parameter
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'book'),
'supports' => array('title','editor', 'custom-fields','thumbnail')
)
);
}
Fehlerbehebung bei anpassbaren Slugs
Einige Themes und Plugins ermöglichen es dem Website-Administrator, eigene Slugs für ihre benutzerdefinierten Beitragstypen und benutzerdefinierten Taxonomien festzulegen.
Wenn Ihre übersetzten benutzerdefinierten Slugs einen 404-Fehler zurückgeben, überprüfen Sie bitte Folgendes:
- Der benutzerdefinierte Typ sollte bei allen Anfragen immer mit demselben Slug registriert werden: pro Sprache, Frontend, Backend, AJAX, Heartbeat usw. Daher sollte sich in
'rewrite' => [ 'slug' => $my_custom_slug ],der Wert von$my_custom_slugnicht von einer Anfrage zur anderen ändern, selbst wenn er aus einer Option (oder einer anderen benutzerdefinierten Einstellung) stammt. - WPML unterstützt nur die Übersetzung benutzerdefinierter Slugs (wenn der benutzerdefinierte Typ registriert wird), aber keine benutzerdefinierte Permalink-Struktur.
- Wenn der benutzerdefinierte Slug als Option gespeichert wird, sollte er nicht als
admin-textsin der Dateiwpml-config.xmlregistriert werden. - Nach dem Aktualisieren des Werts eines benutzerdefinierten Slugs sollte das Theme/Plugin auch die Rewrite-Regeln leeren (durch Aufruf von
flush_rewrite_rules();).