WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Структура кастомных постов и таксономий

Как правильно формировать в вордпрессе подобную структуру?

/developers - список разработчиков с пагинацией
/developers/javascript - список разработчиков, которые выводятся по таксономии javascript
/developers/tomaz-zaman - страница разработчика

Я нашел только такое решение, неужели более рационального варианта в вордпрессе нет?

function generate_taxonomy_rewrite_rules( $wp_rewrite ) {
  $rules = array();
  $post_types = get_post_types( array( 'name' => 'developer', 'public' => true, '_builtin' => false ), 'objects' );
  $taxonomies = get_taxonomies( array( 'name' => 'developer_tag', '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;
		}
	  }
	}
  }
  $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');
0
evgenij_chernyshov
1 месяц назад
  • 0
    qwert555139 naytikurs.ru

    developers - это может быть тип записей с включенным отображением архивов записей.
    тогда таксономию можно сделать например category_developers и указать в качестве slug developers.

    А для типа записей developers указать другой slug.

    Вроде тогда конфликтов по части урл не должно быть.

    evgenij_chernyshov 1 месяц назад

    Таким образом? Если да, то увы не работает

          register_post_type( 'event', [
    		'taxonomies' => ['event_tag' ],
    		'public' => true,
    		'labels' => [
    		  'name' => 'Events',
    		],
    		'has_archive' => true,
    		'rewrite' => ['slug' => 'event_type'],
    		'menu-icon' => 'dashicons-calendar',
    	  ]);
    
    	  register_taxonomy( 'event_tag', ['event'], [
    		'labels' => ['name' => 'Event Tags'],
    		'show_ui' => true,
    		'show_tagcloud' => false,
    		'rewrite' => array( 'slug' => 'events' )
    	  ] );
    qwert555 1 месяц назад

    так

      register_post_type( 'events', [
    		'taxonomies' => ['event_tag' ],
    		'public' => true,
    		'labels' => [
    		  'name' => 'Праздники',
    		],
    		'has_archive' => true,
    		'rewrite' => ['slug' => 'event','with_front' => false, ],
    		'menu-icon' => 'dashicons-calendar',
    	  ]);
    
    	  register_taxonomy( 'event_tag', ['events'], [
    		'labels' => ['name' => 'Категории праздников'],
    		'show_ui' => true,
    		'show_tagcloud' => false,
    		'rewrite' => array( 'slug' => 'events','with_front' => false,  )
    	  ] );

    и обновить настройки чпу

    evgenij_chernyshov 1 месяц назад

    Извиняюсь, а что это вообще меняет и каким образом решает проблему?

    /event/one/ пост
    /event/ архивы
    /events/tag/ тег
    /events/ страница не найдена

    qwert555 1 месяц назад

    'has_archive' => true поменяйте на 'has_archive' => 'events' и снова обновите чпу

    evgenij_chernyshov 1 месяц назад

    Благодарю, сейчас попробую. Также хотел уточнить, а такой код, я имею ввиду, который переписывает правила ссылок, его можно использовать для высокопосещаемового сайта? Или эта функция не сильно нагружает сайт

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация