WPML

Lorsque vous enregistrez manuellement des types de publication personnalisés, WordPress vous permet de définir un slug d’archive distinct. La façon dont vous le configurez détermine si le slug sera traduit dans votre langue secondaire ou non.

Lors de l’enregistrement manuel de types de publication personnalisés, vous pouvez définir un slug d’archive distinct à l’aide de la fonction has_archive.

WPML permet de définir has_archive sur une chaîne de texte. Cependant, si la valeur de la chaîne est définie sur autre chose que rewrite['slug'], ou si le slug du nom du type de publication personnalisé n’est pas défini, le slug d’archive ne sera pas traduisible.

Définir un slug traduisible


Dans cet exemple de code, nous définissons 'has_archive' => true. En supposant que le slug book ait été traduit par libro en espagnol, les liens d’archive sont les suivants :

  • Anglais (langue par défaut) : http://mydomain.tld/book/

  • Espagnol (langue secondaire) : 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')	 	 
      )	 	 
   );	 	 
}	 	 

Définir le même slug dans les langues par défaut et secondaire

Dans cet exemple de code, nous définissons une chaîne spécifique pour le paramètre 'has_archive' => 'my-books'. Les liens d’archive sont désormais les suivants :
  • Anglais (langue par défaut) : http://mydomain.tld/my-books/
  • Espagnol (langue secondaire) : 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')	 	 
      )	 	 
   );	 	 
}	 	 

Dépannage des slugs personnalisables


Certains thèmes et extensions permettent à l’administrateur du site de définir des slugs personnalisés pour leurs types de publication personnalisés et leurs taxonomies personnalisées.

Si vos slugs personnalisés traduits renvoient une erreur 404, veuillez vérifier les points suivants :


  • Le type personnalisé doit toujours être enregistré avec le même slug pour toutes les requêtes : par langue, front-end, back-end, AJAX, heartbeat, etc. Ainsi, dans 'rewrite' => [ 'slug' => $my_custom_slug ],, la valeur de $my_custom_slug ne doit pas changer d’une requête à l’autre, même si elle provient d’une option (ou de tout paramètre personnalisé).

  • WPML prend en charge uniquement la traduction du slug personnalisé (lorsque le type personnalisé est enregistré), mais pas la structure de permalien personnalisée.

  • Si le slug personnalisé est stocké en tant qu’option, il ne doit pas être enregistré en tant que admin-texts dans le fichier wpml-config.xml.

  • Après la mise à jour de la valeur d’un slug personnalisé, le thème ou l’extension doit également vider les règles de réécriture (en appelant flush_rewrite_rules();).

Écrit par Amir · Dernière mise à jour 30 mai 2024