web-dev-qa-db-fra.com

Réécrire l'URL pour le type de message personnalisé

J'utilise le plugin WPML pour traduire mon site. J'ai un type de message personnalisé appelé "vinos" et j'utilise ceci args:

$args = array( 
            'labels' => $labels,
            'hierarchical' => false,
            'supports' => array('title', 'thumbnail'),
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'menu_position' => 6,
            'show_in_nav_menus' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'has_archive' => 'nuestros-vinos/catalogo',
            'query_var' => true,
            'can_export' => true,
            'capability_type' => 'post',
            'rewrite' => array('slug' => 'nuestros-vinos/catalogo/marcas/%marcas%')
    );
    register_post_type('vinos', $args);

Le problème est que je ne peux pas traduire ma chaîne "nuestros-vinos/catalogo/marcas" en anglais et pour cette raison, mes URL sont les suivantes:

www.domain.com/nuestros-vinos/catalogo/ ---------> Voir toute ma liste de vins en espagnol www.domain.com/fr/nuestros-vinos/catalogo/ ------ > afficher toute ma liste de vins en anglais

mais je voudrais que dans la version anglaise, l'URL était:

www.domain.com/fr/our-wines/catalog/

J'essaie d'utiliser des règles de réécriture:

add_filter('generate_rewrite_rules', 'customposttype_rewrites');
function customposttype_rewrites($wp_rewrite) {
    $newrules = array();
    $newrules['en/our-wines/catalog/?$'] = 'en/index.php?post_type=vinos';
    $wp_rewrite->rules = $newrules + $wp_rewrite->rules;
}

Mais cela ne fonctionne pas, toujours page non trouvée.

Comment puis-je le faire?

Merci.

4
Mike

cela ne fonctionnera pas:

'en/index.php?post_type=vinos'

il n'y a pas de en/index.php, il doit être:

'index.php?post_type=vinos'

si vous devez détecter en dans le chemin, ajoutez une requête, puis définissez-la dans votre réécriture:

function wpa_query_vars( $qvars ) {
    $qvars[] = 'wpa_lang';
    return $qvars;
}
add_filter( 'query_vars', 'wpa_query_vars' );

puis dans votre règle de réécriture:

$newrules['en/our-wines/catalog/?$'] = 'index.php?post_type=vinos&wpa_lang=en';
1
Milo

Essayez la solution mentionnée ici: http://wpengineer.com/2044/custom-post-type-and-permalink/ qui implique essentiellement de ré-enregistrer vos paramètres de permalien.

Exemple: définissez les permaliens sur la structure par défaut, enregistrez. Basculez sur la structure de permalien de votre choix, enregistrez à nouveau, puis vérifiez à nouveau si le problème de post-permalien personnalisé persiste.

J'ai eu 404 problèmes dans le passé avec des permaliens de publication personnalisés et la solution mentionnée ci-dessus a fonctionné pour moi.

Edit: En outre, j'espère que vous n'avez activé aucun plugin de mise en cache pendant le codage, vous avez simplement oublié de le mentionner.

0
user25195