////PLUGIN REMOVE SLUG
if ( ! defined( 'WPINC' ) ) {
die;
}
///**
// * Remove the slug from custom post type permalinks.
// */
function nsppt_remove_cpt_slug( $post_link, $post, $leavename ) {
if ( ! in_array( $post->post_type, array( 'slug1', 'slug2' ) ) || 'publish' != $post->post_status )
return $post_link;
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
return $post_link;
}
add_filter( 'post_type_link', 'nsppt_remove_cpt_slug', 10, 3 );
/**
* Some hackery to have WordPress match postname to any of our public post types
* All of our public post types can have /post-name/ as the slug, so they better be unique across all posts
* Typically core only accounts for posts and pages where the slug is /post-name/
*/
function nsppt_parse_request_tricksy( $query ) {
// Only noop the main query
if ( ! $query->is_main_query() )
return;
// Only noop our very specific rewrite rule match
if ( 2 != count( $query->query )
|| ! isset( $query->query['page'] ) )
return;
// 'name' will be set if post permalinks are just post_name, otherwise the page rule will match
if ( ! empty( $query->query['name'] ) )
$query->set( 'post_type', array( 'post', 'slug1', 'page', 'slug2' ) );
}
add_action( 'pre_get_posts', 'nsppt_parse_request_tricksy' );
?>
Олег: Спасибо! Как можно сделать так, что бы можно вбить не один ID категории (22), а больше (22, 23, 24)? Просто этот код выводит всех дочек всех категорий, а мне нужно только определенного уровня. Спасибо.
Игорь Воротнёв: И template_include вставить в taxonomy-lessons.php? Я правильно понимаю?) Нужно взять этот фильтр, сделать проверку на категорию дочек, если это дочка, то подгружаем нужный шаблон?
Игорь Воротнёв: таксономию создал) а если вернуться к главной теме, то как все-таки задать шаблоны? Шаблон taxonomy-lessons.php используется для /mathematics и для /9. А как сделать свой шаблон для /9, тобишь этих дочерних рубрик около ~140 (/1,/2,/3,/4,/5,/6 и т.д.)
Пример ЧПУ выглядят так:
site.ru/lessons/mathematics/9
site.ru/lessons/mathematics/14
site.ru/lessons/history/5
site.ru/lessons/geography/10
Все, проблему с ЧПУ решил! Может кому пригодится!
В настройках таксономии была отключена вложенность:
'hierarchical' => false // разрешить вложенность
Нужно переписать на true:
'hierarchical' => true // разрешить вложенность
Игорь Воротнёв: в админке wordpress в разделе созданной таксономии (уроки), при переходе на 9 категорию почему то переходит в site.ru/lessons/9 и там действительно все как нужно, правильно выводится, используется даже шаблон taxonomy-lessons.php! Но почему так, ведь адрес должен быть такой при переходе site.ru/lessons/mathematics/9 (и естественно здесь страница 404.php)?
Игорь Воротнёв: Query Monitor показывает:
Для url: site.ru/lessons/mathematics/9/
Для /lessons используется файл pagelessons.php (wp-content/themes/mytheme/pagelessons.php)
Для /mathematics используется taxonomy-lessons.php (wp-content/themes/mytheme/taxonomy-lessons.php)
Для /9 используется 404.php (wp-content/themes/mytheme/404.php)
Игорь Воротнёв: Спасибо помогло!
Вообщем получился полный колхоз. Почти добился желаемого результата. ЧПУ выглядит: site.ru/lessons/mathematics/9/
/lessons сделана через страницу page. Она содержит список предметов.
/mathematics выводится через taxonomy-lessons.php, тут список заданий с 1-20-ое, где пользователь выбирает нужный ему номер задание (например 9).
/9 никак не могу вывести здесь список постов относящихся к заданию 9. Вроде за это должен отвечать taxonomy.php но все равно ошибка 404.
Вместо slug1 и slug2 свои названия