flush_rules(); } public function create_rewrite_rules($rewrite) { global $wp_rewrite; // loop through custom taxonomies $args = array( 'public' => true, '_builtin' => false ); $output = 'names'; // or objects $operator = 'and'; // 'and' or 'or' $custom_taxonomies = get_taxonomies($args, $output, $operator); if ($custom_taxonomies) { foreach ($custom_taxonomies as $tax_name ) { $tax_token = '%'.$tax_name.'%'; $wp_rewrite->add_rewrite_tag($tax_token, '(.+)', $tax_name.'='); } } // read current permalink structure and set the same structre $keywords_rewrite = $wp_rewrite->generate_rewrite_rules($wp_rewrite->root.$wp_rewrite->permalink_structure); return ( $rewrite + $keywords_rewrite ); } public function modify_link_addresses($permalink, $post_id, $leavename) { global $blog_id; global $wp_rewrite; // this is user's permalink structure set in options $permastruct = $wp_rewrite->permalink_structure; $args = array( 'public' => true, '_builtin' => false ); $output = 'names'; // or objects $operator = 'and'; // 'and' or 'or' $custom_taxonomies = get_taxonomies($args, $output, $operator); if ($custom_taxonomies) { foreach ($custom_taxonomies as $tax_name ) { $tax_token = '%'.$tax_name.'%'; $tax_terms = get_the_terms( $post->id, $tax_name ); //var_dump($tax_terms); if ( !empty($tax_terms) ) { foreach($tax_terms as $a_term) { $long_slug = $a_term->slug; if( false != (int)$a_term->parent ) { // a's parent p exists $p_term = get_term( (int)$a_term->parent, $tax_name );//var_dump($p_term->slug); $long_slug = ($p_term->slug) ? $p_term->slug .'+'. $long_slug : $long_slug; } if( false != (int)$a_term->parent AND false != (int)$p_term->parent ) { // p's parent g exists $g_term = get_term( (int)$p_term->parent, $tax_name ); $long_slug = ($g_term->slug) ? $g_term->slug .'+'. $long_slug : $long_slug; } $permalink = str_replace($tax_token, $long_slug, $permalink); break; } } else {$permalink = str_replace($tax_token, 'no-'.$tax_name, $permalink); } } } return $permalink; } } $tsp = new Tax_Seo_Perma(); ?>