За последние 24 часа нас посетили 21367 программистов и 1022 робота. Сейчас ищут 669 программистов ...

Модификация кастомного типа записей Wordpress

Тема в разделе "Wordpress", создана пользователем JonyFront, 14 июн 2019.

  1. JonyFront

    JonyFront Активный пользователь

    С нами с:
    5 июн 2016
    Сообщения:
    143
    Симпатии:
    1
    Добрый день, я создал кастомный тип записей с рубриками, и не могу понять как модернизировать их чпу...
    Для записей мне нужен такой чпу: site.com/specialists/url записи
    в данный момент добавляется еще адрес категории, и я не могу понять как ее убрать из чпу, удалял add_filter('post_type_link', 'faq_permalink', 1, 2); и в чпу нет адреса категории, но и запись не открывается...

    Для рубрик сейчас такой: site.com/specialists/url рубрики - так и нужно, менять его не нужно

    И нужен общий архив записей specialists, он работает сейчас по адресу: site.com/specialists/, НО, стоит добавить какой-то GET запрос, например site.com/specialists/?search=bon, то страница перестает работать, вп ее просто не обрабатывает почему-то(Страница не найдена.)...

    Заранее спасибо за помощь!

    Код функции:
    PHP:
    1. add_action( 'init', 'create_news_post_type_specialists' );
    2. function create_news_post_type_specialists() {
    3. register_taxonomy('procedure', array('specialists'), array(
    4. 'label' => 'Процедуры', // определяется параметром $labels->name
    5. 'labels' => array(
    6. 'name' => 'Процедуры',
    7. 'singular_name' => 'Процедуры',
    8. 'search_items' => 'Искать Процедуры',
    9. 'all_items' => 'Все Процедуры',
    10. 'parent_item' => 'Родит. раздел Процедуры',
    11. 'parent_item_colon' => 'Родит. раздел Процедуры:',
    12. 'edit_item' => 'Ред. Раздел Процедуры',
    13. 'update_item' => 'Обновить Раздел Процедуры',
    14. 'add_new_item' => 'Добавить Раздел Процедуры',
    15. 'new_item_name' => 'Новый Раздел Процедуры',
    16. 'menu_name' => 'Раздел Процедуры',
    17. ),
    18. 'description' => 'Процедуры', // описание таксономии
    19. 'public' => true,
    20. 'show_in_nav_menus' => false, // равен аргументу public
    21. 'show_ui' => true, // равен аргументу public
    22. 'show_tagcloud' => false, // равен аргументу show_ui
    23. 'hierarchical' => true,
    24. 'rewrite' => array('slug'=>'specialists', 'hierarchical'=>false, 'with_front'=>false, 'feed'=>false ),
    25. 'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
    26. ) );
    27. register_post_type('specialists', array(
    28. 'label' => 'Специалисты',
    29. 'labels' => array(
    30. 'name' => 'Специалисты',
    31. 'singular_name' => 'Специалисты',
    32. 'menu_name' => 'Специалисты',
    33. 'all_items' => 'Все Специалисты',
    34. 'add_new' => 'Добавить Специалисты',
    35. 'add_new_item' => 'Добавить нового Специалисты',
    36. 'edit' => 'Редактировать',
    37. 'edit_item' => 'Редактировать Специалисты',
    38. 'new_item' => 'Новый Специалисты',
    39. ),
    40. 'description' => '',
    41. 'public' => true,
    42. 'publicly_queryable' => true,
    43. 'show_ui' => true,
    44. 'show_in_rest' => false,
    45. 'rest_base' => '',
    46. 'show_in_menu' => true,
    47. 'exclude_from_search' => false,
    48. 'capability_type' => 'post',
    49. 'map_meta_cap' => true,
    50. 'hierarchical' => false,
    51. 'rewrite' => array( 'slug'=>'specialists/%procedure%', 'hierarchical'=>false, 'with_front'=>true, 'feed'=>false ),
    52. 'has_archive' => 'specialists',
    53. 'query_var' => true,
    54. 'supports' => array( 'title','editor','author','thumbnail','excerpt','comments' ),
    55. 'menu_icon' => 'dashicons-images-alt2',
    56. 'menu_position' => 4,
    57. 'taxonomies' => array( 'procedure' ),
    58. ) );
    59. flush_rewrite_rules(false); //Специальная функция, которая сделает так, чтобы изменения вступили в силу сразу же (не нужно было обновлять настройки с постоянными ссылками)
    60. }
    61.  
    62. ## Отфильтруем ЧПУ произвольного типа
    63. // фильтр: apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
    64. add_filter('post_type_link', 'faq_permalink', 1, 2);
    65. function faq_permalink( $permalink, $post ){
    66. // выходим если это не наш тип записи: без холдера %products%
    67. if( strpos($permalink, '%procedure%') === false )
    68. return $permalink;
    69. // Получаем элементы таксы
    70. $terms = get_the_terms($post, 'procedure');
    71. // если есть элемент заменим холдер
    72. if( ! is_wp_error($terms) && !empty($terms) && is_object($terms[0]) )
    73. $term_slug = array_pop($terms)->slug;
    74. // элемента нет, а должен быть...
    75. else
    76. $term_slug = 'no-procedure';
    77. return str_replace('%procedure%', $term_slug, $permalink );
    78. }