WP Manifestindependent plugin directory
manifest / i18n / wp-polylang-translate-rewrite-slugs

Polylang - Translate URL Rewrite Slugs

Wordpress plugin to help translate post types rewrite slugs with the Polylang plugin.

★ 110stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/klicher/wp-polylang-translate-rewrite-slugs/archive/refs/heads/master.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

WordPress plugin that add rewrite url slugs translation feature to Polylang.

Work in progress ;)

Upgrade notice < 0.3.0

If you used a version prior to 0.3.0, the plugin will probably crash as the structure of the param for the "pll_translated_post_type_rewrite_slugs" filter has changed.

Translate Post Type URLs

Translate rewrite slugs for post types by doing 5 things:

  • Remove original extra rewrite rules and permastruct for these post types;
  • Translate the extra rewrite rules and permastruct for these post types;
  • Stop Polylang from translating rewrite rules for these post types;
  • Fix "get_permalink" for these post types.
  • Fix "get_post_type_archive_link" for these post types.

To translate a post type rewrite slug, add the filter "pll_translated_post_type_rewrite_slugs" to your functions.php file or your plugin and add the "has_archive" and "rewrite" key has you normally do for the params of the "register_post_type" Wordpress function but add it for each post type and language you want.

Example

<?php
add_filter('pll_translated_post_type_rewrite_slugs', function($post_type_translated_slugs) {
    // Add translation for "product" post type.
    $post_type_translated_slugs = array(
        'product' => array(
            'fr' => array(
                'has_archive' => true,
                'rewrite' => array(
                    'slug' => 'produit',
                ),
            ),
            'en' => array(
                'has_archive' => true,
                'rewrite' => array(
                    'slug' => 'product',
                ),
            ),
        ),
    );
    return $post_type_translated_slugs;
});
?>