• I use polylang pro for different websites.

    I have a cpt called “machine” and a custom taxonomy called “machine_type”.
    I need to rewrite the url of the machines.
    The permalink structure should look like “machine/machine_type/title”,
    where machine is the translated slug of the posttype, machine_type ist the translated slug of the taxonomy and title is the post_title.

    How can I implement this?

    
    function rewritePermalink($permalink, $post) {
    
    	if($post->post_type == 'machine' ) {
    
    		$terms = get_the_terms( $post, 'machine_type' );
    		$termSlug = '';
    
    		if( ! empty( $terms ) ) {
    
    			foreach ( $terms as $term ) {
    
    				$termSlug = $term->slug;
    				break;
    
    			}
    
    		}
    
    		$permalink = get_home_url() ."/machine/" . $termSlug . '/' . $post->post_name;
    		//$permalink = get_home_url() ."/machine/test/" . $post->post_name;
    
    	}
    
    	return $permalink;
    
    }
    add_filter('post_type_link', "rewritePermalink", 10, 2);
    
    function rewriteRules($wp_rewrite) {
    
    	$rules = array();
    	$terms = get_terms( array(
    		'taxonomy' => 'machine_type',
    		'hide_empty' => false,
    	) );
    
    	$postType = 'machine';
    
    	foreach($terms as $term) {
    
    		$rules['machine/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=' . $postType. '&machine=$matches[1]&name=$matches[1]';
    
    	}
    
    	$wp_rewrite->rules = $rules + $wp_rewrite->rules;
    
    }
    add_filter('generate_rewrite_rules',  'rewriteRules');

    Without Polylang it works like a charm.
    Hope that anybody can help ?? .

    Greetings

    • This topic was modified 5 years, 9 months ago by x_magnet_x.
Viewing 1 replies (of 1 total)
  • Thread Starter x_magnet_x

    (@x_magnet_x)

    Ok, I’ve found a solution.

    
    function rewritePermalink($permalink, $post) {
    	if($post->post_type == 'machine') {
    
    		$terms = get_the_terms( $post, 'machine_type' );
    		$termSlug = '';
    
    		if(!empty($terms)) {
    
    			foreach ($terms as $term) {
    				$termSlug = $term->slug;
    				break;
    			}
    		}
    		$permalink = get_home_url() ."/machine/" . $termSlug . '/' . $post->post_name;
    	}
    
    	return $permalink;
    }
    add_filter('post_type_link', "\\zp\\posttypes\\machine\\rewritePermalink", 10, 2);
    
    function rewriteRules($wp_rewrite) {
        $rules = array();
        $rules = apply_filters('machine_type_rewrite_rules', $rules);
    	$wp_rewrite->rules = array_merge($rules, $wp_rewrite->rules);
    }
    add_filter('generate_rewrite_rules',  '\\zp\\posttypes\\machine\\rewriteRules');
    
    function rewriteRulePolylang($rules) {
    	return array_merge($rules, array('machine_type'));
    }
    add_filter('pll_rewrite_rules',  '\\zp\\posttypes\\machine\\rewriteRulePolylang', 10, 1);
    
    function machineTypeRewriteFilter($rules) {
        $terms = get_terms(
            array(
                'taxonomy' => 'machine_type',
                'hide_empty' => false,
            )
        );
    
        $languages = \pll_languages_list();
        foreach ($languages as $language) {
            foreach ($terms as $term) {
                $slug = \pll_translate_string('machine', $language);
                $rules[$slug . '/' . $term->slug . '/([^/]*)$'] = 'index.php?post_type=machine&machine=$matches[1]&name=$matches[1]';
            }
        }
    
        return $rules;
    }
    add_filter('machine_type_rewrite_rules', '\\zp\\posttypes\\machine\\machineTypeRewriteFilter', 10, 1);
    
    • This reply was modified 5 years, 9 months ago by x_magnet_x.
Viewing 1 replies (of 1 total)
  • The topic ‘generate_rewrite_rules’ is closed to new replies.