Поддержка Проблемы и решения Убрать slug из URL произвольного типа записи

  • Добрый день!
    Регистрирую новый тип записи через functions.php
    Убираю slug через
    ‘rewrite’ => array( ‘slug’ => ‘/’,)
    По итогу slug убирается, всё окей, но почему-то все остальные страницы со старыми типами записи (page, post), теперь недоступны, ошибка 404.
    Пермалинки обновлял, не помогает.

    Вот мой полный код:

    add_action( ‘init’, ‘true_register_post_type_init’ ); // Использовать функцию только внутри хука init
    function true_register_post_type_init() {
    $labels = array(
    ‘name’ => ‘name’,
    ‘singular_name’ => ‘name’, // админ панель Добавить->Функцию
    ‘add_new’ => ‘Add name’,
    ‘add_new_item’ => ‘Add New name’, // заголовок тега <title>
    ‘edit_item’ => ‘Edit name’,
    ‘new_item’ => ‘New Name’,
    ‘all_items’ => ‘All Names’,
    ‘view_item’ => ‘View Names’,
    ‘search_items’ => ‘Search Name’,
    ‘not_found’ => ‘Not Found’,
    ‘not_found_in_trash’ => ‘Not Found’,
    ‘menu_name’ => ‘ Names’ // ссылка в меню в админке
    );
    $args = array(
    ‘labels’ => $labels,
    ‘public’ => true,
    ‘show_ui’ => true, // показывать интерфейс в админке
    ‘has_archive’ => false,
    ‘menu_icon’ => ‘dashicons-media-archive’,
    ‘hierarchical’ => true,
    ‘query_var’ => true,
    ‘can_export’ => true,
    ‘menu_position’ => 20, // порядок в меню
    ‘show_in_rest’ => true,
    ‘with_front’ => false,
    ‘supports’ => array( ‘title’, ‘editor’, ‘comments’, ‘author’, ‘thumbnail’, ‘page-attributes’),
    ‘rewrite’ => array( ‘slug’ => ‘/’,),

    );
    register_post_type(‘new_post_type’, $args);

    }

    Подскажите, в чём может быть дело? Пробовал всё это проворачивать через плагины, которые добавляют произвольные типы постов, пробовал через разные темы (свои собственные и темы из каталога).

Просмотр 1 ответа (всего 1)
  • Нашёл решение. Если добавлять слаг = / , то ничего не работает. Поэтому удаляем слаг с помощью функции:

    function nameofmeta_remove_slug( $post_link, $post, $leavename ) {
    if ( ‘nameofmeta’ != $post->post_type || ‘publish’ != $post->post_status ) {
    return $post_link;
    }
    $post_link = str_replace( ‘/’ . $post->post_type . ‘/’, ‘/’, $post_link );
    return $post_link;
    }
    add_filter( ‘post_type_link’, ‘nameofmeta_remove_slug’, 10, 3 );

    Затем этот код, чтобы не было ошибки 404:

    function nameoftype_parse_request( $query ) {
    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[‘page’] ) ) {
    return;
    }
    if ( ! empty( $query->query[‘name’] ) ) {
    $query->set( ‘post_type’, array( ‘post’, ‘nameoftype’, ‘page’ ) );
    }
    }
    add_action( ‘pre_get_posts’, ‘nameoftype_parse_request’ );

    Если добавить стандартным образом слаг= / при регистрации типа поста и потом этот код, всё равно не работает. Но этот способ работает. Не забываем обновлять постоянные ссылке, если кто-то столкнулся с такой же проблемой.

Просмотр 1 ответа (всего 1)
  • Тема «Убрать slug из URL произвольного типа записи» закрыта для новых ответов.