Localizzazione tematica di "lumache" (tipi di post personalizzati, tassonomie)


17

nel mio tema voglio definire una serie di tipi di post personalizzati e tassonomie personalizzate, ognuna con la propria lumaca personalizzata; la lingua di base del mio tema è l'inglese, quindi le lumache saranno in lingua inglese

ad esempio durante la definizione della lumaca del tipo di post personalizzato "product" args:

'rewrite' => array( 'slug' => 'product' ),

c'è un modo per tradurre lo "slug" attraverso i file po / mo? posso metterlo come:

'rewrite' => array( 'slug' => __('product', 'mytextdomain') )

o non funzionerà? qual è la pratica corrente per localizzare le lumache?


Non so se stiamo affrontando lo stesso problema, ma sembra che sia così. Per illustrarlo meglio qui è un collegamento a una pagina di indice originale per un tipo di post personalizzato chiamato prensacon una lumaca impostata su prensa. Usando WPML la lumaca della pagina tradotta è presscome non può essere di prensanuovo: / en / press / che non mostra nulla (nota che ora facendo clic sul collegamento ES non ti riporta a / prensa /). MA, se visiti / en / prensa / funziona ...
Naoise Golden,

Ho deciso di reindirizzare le pagine da / en / press a / en / prensa, quindi il collegamento probabilmente non funzionerà più come indicato. Peccato che non potessi usare la lumaca localizzata, ma lavorare in orario è meglio di url-localizzazione-friendly
Naoise Golden

Vedi la mia risposta Naoise, penso che ti darà una soluzione funzionante.
chrisguitarguy,

Ho avuto questo problema per ore. Finalmente ho trovato un trucco: github.com/stouch/wp-plugin-polylang-localized-taxonomy-slug/… Saluti.
Sylvain Tch,

Risposte:


19

Non proverei a localizzare le tue lumache. Invece, perché non dare ai tuoi utenti la possibilità di cambiarli aggiungendo un altro campo alla pagina delle impostazioni del permalink?

Aggancia load-options-permalink.phpe imposta alcune cose per catturare i $_POSTdati per salvare la tua lumaca. Aggiungi anche un campo impostazioni alla pagina.

<?php
add_action( 'load-options-permalink.php', 'wpse30021_load_permalinks' );
function wpse30021_load_permalinks()
{
    if( isset( $_POST['wpse30021_cpt_base'] ) )
    {
        update_option( 'wpse30021_cpt_base', sanitize_title_with_dashes( $_POST['wpse30021_cpt_base'] ) );
    }

    // Add a settings field to the permalink page
    add_settings_field( 'wpse30021_cpt_base', __( 'CPT Base' ), 'wpse30021_field_callback', 'permalink', 'optional' );
}

Quindi la funzione di richiamata per il campo delle impostazioni:

<?php
function wpse30021_field_callback()
{
    $value = get_option( 'wpse30021_cpt_base' );    
    echo '<input type="text" value="' . esc_attr( $value ) . '" name="wpse30021_cpt_base" id="wpse30021_cpt_base" class="regular-text" />';
}

Quindi quando registri il tuo tipo di post, prendi la lumaca con get_option. Se non è presente, utilizza l'impostazione predefinita.

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = get_option( 'wpse30021_cpt_base' );
    if( ! $slug ) $slug = 'your-default-slug';

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

Ecco la parte del campo delle impostazioni come plugin https://gist.github.com/1275867

EDIT: un'altra opzione

Puoi anche cambiare la lumaca in base a ciò che è definito in WPLANG costante.

Basta scrivere una funzione rapida che contiene i dati ...

<?php
function wpse30021_get_slug()
{
    // return a default slug
    if( ! defined( 'WPLANG' ) || ! WPLANG || 'en_US' == WPLANG ) return 'press';

    // array of slug data
    $slugs = array( 
        'fr_FR' => 'presse',
        'es_ES' => 'prensa'
        // etc.
    );

    return $slugs[WPLANG];
}

Quindi prendi la lumaca dove registri il tuo tipo di post personalizzato.

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = wpse30021_get_slug();

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

L'opzione migliore, IMO, sarebbe quella di dare all'utente un'opzione e fornire solide impostazioni predefinite:

<?php
add_action( 'init', 'wpse30021_register_post_type' );
function wpse30021_register_post_type()
{
    $slug = get_option( 'wpse30021_cpt_base' );
    // They didn't set up an option, get the default
    if( ! $slug ) $slug = wpse30021_get_slug();

    // register your post type, reference $slug for the rewrite
    $args['rewrite'] = array( 'slug' => $slug );

    // Obviously you probably need more $args than one....
    register_post_type( 'wpse30021_pt', $args );
}

2
+1 per il plugin su gist e il codice ben documentato. Nel mio caso, però, si vanifica lo scopo, che non è quello di dare potere all'utente, ma di rendere gli URL sensibili alla localizzazione (seo friendly) per i tipi di post personalizzati
Naoise Golden,

1
Non sono sicuro di capire perché vorresti rimuovere un'opzione dal tuo utente. Inoltre, eseguire una lumaca attraverso un filtro di traduzione offre la stessa opzione: cambiare la lumaca. Solo non con un bel campo da compilare.
chrisguitarguy,

1
solo per curiosità, perché wpse30021?
Naoise Golden,

Sembra che questa opzione sia per una localizzazione basata su WPLANG. Ma cosa succede se stai lavorando con un sito multilingue? (ad esempio plugin WPML). La domanda riguarda più la visualizzazione di una lumaca diversa a seconda della localizzazione del client che la possibilità di impostare una lumaca di tipo post personalizzato dalle opzioni del server.
Naoise Golden,

wpse = Scambio di stack di WordPress. 30021 è il numero dall'URL. Buona fortuna con la tua ricerca; Ho dato la mia risposta. L'ulteriore complessità che stai aggiungendo e l'evidente completo cambiamento della domanda originale, originariamente riguardante le lumache CPT, è solo il caso per consentire all'utente finale di scegliere la propria lumaca.
chrisguitarguy,

2

Se quello non funziona Perché non fai semplicemente:

$post_slug=  __('product', 'mytextdomain');
'rewrite' => array( 'slug' => $post_slug );

questo non ha funzionato per me
Naoise Golden,

è fondamentalmente lo stesso codice in un altro stile
Naoise Golden,

Hai aggiunto il dominio di testo corretto? <? php load_theme_textdomain (my_text_domain);?>?
Chifliiiii,

Questa è di gran lunga la soluzione migliore.
Al Rosado,

2

Lo sto facendo esattamente in un tema che stiamo sviluppando. È disponibile in 5 lingue distinte e ogni lingua ha un insieme tradotto di categorie. Il primo componente dell'URL nel tema viene analizzato per determinare la lingua utilizzata, nel formato lingua del paese:

/uk-en
/fr-fr
/it-it

E quindi le categorie tradotte vengono analizzate come ulteriori componenti dell'URL.

L'URL viene analizzato nella parse_requestfase:

function my_parse_request( $wp ) {
    $path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );

    $components = preg_split('|/|', $path, null, PREG_SPLIT_NO_EMPTY );

    // Determine language from $components[0]
    $language = array_shift( $components );
    ...

    // Load translations file...
    $mofile = get_stylesheet_directory()."/$language.mo";

    load_textdomain( 'mydomain', $mofile );

    ...

    // Determine category from $components[0]
    if( __( 'some-category', 'mydomain' ) == $components[0] )
      $wp->query_vars['category'] = 'some-category';

    ...
}
add_action( 'parse_request', 'my_parse_request' );

Questo esempio è privo di controlli necessari, ma è inteso solo come esempio.

Ci sono svantaggi di questo approccio, ovviamente, ma consente URL naturali in tutte le lingue. I principali svantaggi che vedo sono:

1) Non utilizza il meccanismo permalink. Questo potrebbe probabilmente essere esteso in modo da generare le regole di permalink appropriate per tutte le lingue e non sarà necessario parse_request, ma farlo per tutte le lingue implicherebbe il caricamento di un file MO dopo l'altro in un ciclo, e io no sapere quanto è ben supportato.

2) Se un traduttore cambia una lumaca, i collegamenti vengono invalidati.


0

Potresti provare questo nel tuo functions.php

<?php
add_filter('rewrite_slugs', function($translated_slugs) {
    // the possible translations for your slug 'product'
    $translated_slugs = array(
        'product' => array(
            'pt' => array(
                'has_archive' => true,'rewrite' => array('slug' => 'produto'),
            ),
            'es' => array(
                'has_archive' => true,'rewrite' => array('slug' => 'producto'),
            ),
        ),
    );
    return $translated_slugs;
});
?>

come visto qui


-1

Consiglierei di non rendere traducibili le lumache .

La traduzione è per il contenuto del sito rivolto all'utente . Le lumache sono utilizzate internamente e sono solo marginalmente "rivolte al pubblico" tramite riscritture di URL - e gli URL non devono essere traducibili .

Quindi: lascia in pace le tue lumache, come le definisci. Crea solo stringhe traducibili destinate al consumo pubblico .


11
le lumache tradotte, sia dal punto di vista del seo che dal punto di vista dell'esperienza dell'utente, hanno molto senso ...
Naoise Golden,

Non sono d'accordo sul fatto che le lumache abbiano comunque un impatto sull'esperienza dell'utente . Se una lumaca viene utilizzata come parte di un collegamento, il testo dell'ancoraggio del collegamento verrà tradotto, quindi l'utente non conoscerà la differenza. E quando le persone iniziano a giocare a "SEO", in genere penso " olio di serpente ". Non sono un esperto SEO, ma non sto comprando l'impatto SEO rispetto alle lumache tradotte.
Chip Bennett,

3
Non sono d'accordo sulla base dell'esperienza. Disponiamo internamente di gestori di contenuti stranieri che dichiarano esplicitamente che le slug degli URL devono essere localizzate. Si tratta di creare un'esperienza locale completa per l'utente straniero. Per alcuni paesi, come il Giappone, è letteralmente essenziale stabilire un tipo autentico di fiducia e indicare che sei davvero serio nel fare affari lì.
internetross

gli URL devono parlare. Quindi, se la lumaca è (come spesso) il nome dell'entità o della tassonomia, la riscrittura deve tener conto dei plurali e delle traduzioni. Questa non è un'opzione, sia per il SEO che semplicemente per le buone pratiche nei confronti degli utenti finali.
Luca Reghellin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.