WPML

Quando registri manualmente i tipi di post personalizzati, WordPress ti permette di impostare uno slug di archivio distinto. Il modo in cui lo configuri determina se lo slug verrà tradotto o meno nella tua lingua secondaria.

Quando registri manualmente i tipi di post personalizzati, puoi impostare uno slug di archivio distinto usando la funzione has_archive.

WPML permette di impostare has_archive come stringa. Tuttavia, se il valore della stringa è impostato su un valore diverso da rewrite['slug'], o se lo slug del nome del tipo di post personalizzato non è impostato, lo slug dell’archivio non sarà traducibile.

Impostare uno slug traducibile


In questo esempio di codice, impostiamo 'has_archive' => true. Supponendo che lo slug book sia stato tradotto in libro in spagnolo, i link dell’archivio sono i seguenti:

  • Inglese (lingua predefinita): http://mydomain.tld/book/

  • Spagnolo (lingua secondaria): 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')	 	 
      )	 	 
   );	 	 
}	 	 

Impostare lo stesso slug nella lingua predefinita e in quella secondaria

In questo esempio di codice, impostiamo una stringa specifica per il parametro 'has_archive' => 'my-books'. Ora i link dell’archivio sono i seguenti:
  • Inglese (lingua predefinita): http://mydomain.tld/my-books/
  • Spagnolo (lingua secondaria): 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')	 	 
      )	 	 
   );	 	 
}	 	 

Risoluzione dei problemi relativi agli slug personalizzabili


Alcuni temi e plugin permettono all’amministratore del sito di impostare degli slug personalizzati per i loro tipi di post personalizzati e per le tassonomie personalizzate.

Se i tuoi slug personalizzati tradotti restituiscono un errore 404, controlla quanto segue:


  • Il tipo personalizzato dovrebbe essere sempre registrato con lo stesso slug in tutte le richieste: per lingua, frontend, backend, AJAX, heartbeat, ecc. Quindi in 'rewrite' => [ 'slug' => $my_custom_slug ], il valore di $my_custom_slug non dovrebbe cambiare da una richiesta all’altra, anche se proviene da un’opzione (o da qualsiasi impostazione personalizzata).

  • WPML supporta solo la traduzione dello slug personalizzato (quando viene registrato il tipo personalizzato), ma non la struttura dei permalink personalizzata.

  • Se lo slug personalizzato è memorizzato come opzione, non dovrebbe essere registrato come admin-texts nel file wpml-config.xml.

  • Dopo aver aggiornato il valore di uno slug personalizzato, il tema/plugin dovrebbe anche svuotare le regole di riscrittura (chiamando flush_rewrite_rules();).

Scritto da Amir · Ultimo aggiornamento 30 maggio 2024