Wordpress Custom Post + Taxonomy, как сделать человечий, нормальный урл

У нас есть

register_post_type('production')

с урлом

/production/production-1

и

register_taxonomy(production_category') с урлом

/production_category/pogruzchiki/

По нормальному это должно выглядеть

/production/pogruzchiki/production-1

Что бы этого добиться использую

'rewrite' => array( 'slug' => 'production/%production_category%', 'with_front' => false ),

с последующим

post_type_link / str_replace( '%production_category%', $terms[0]->slug, $post_link);

Получает нормальный урл

/production/pogruzchiki/production-1

Но с таким походом отваливается пагинация.

Еще нашел вариант

function generate_taxonomy_rewrite_rules( $wp_rewrite ) {
    
  $rules = array();
  $post_types = get_post_types( array( 'name' => 'production', 'public' => true, '_builtin' => false ), 'objects' );
  $taxonomies = get_taxonomies( array( 'name' => 'production_category', 'public' => true, '_builtin' => false ), 'objects' );
    
  foreach ( $post_types as $post_type ) {
    $post_type_name = $post_type->name; // 'developer'
    $post_type_slug = $post_type->rewrite['slug']; // 'developers'

    foreach ( $taxonomies as $taxonomy ) {
      if ( $taxonomy->object_type[0] == $post_type_name ) {
        $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) );
        foreach ( $terms as $term ) {
          $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
          $rules[$post_type_slug . '/' . $term->slug . '/page/?([0-9]{1,})/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug . '&paged=' . $wp_rewrite->preg_index( 1 );
                }
            
            }
    }


  }
    
  $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}

add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules',10,3);

Все работает и урл теперь

/production/asfaltobetonnye-zavody/ и /production/production-1

При попытки добавить term в урл через

add_filter( 'post_type_link')

$post_link = '/'.$post_type_slug.'/'.$term_slugs[0].'/'.$post->post_name;

return $post_link;

урл получается как надо

/production/pogruzchiki/production-1, но получаю 404

Комрады, хелп. Как, как сделать нормально !?


Ответы (0 шт):