WordPress Block – add_rewrite_rule не работает

Вопрос или проблема

Я создал плагин для WordPress для отображения событий.

Плагин разработан с помощью блока WordPress и работает нормально. URL к странице с подробностями: http://localhost:4444/?slug=02-12-2024_artist_name

Чтобы сделать его более читаемым, URL должен выглядеть так: http://localhost:4444/event/02-12-2024_artist_name

Я добавил этот код в свой скрипт plugin.php

add_action('init', function () {
    add_rewrite_rule('event/([a-z0-9-]+)[/]?$', 'index.php?slug=$matches[1]', 'top');
    add_rewrite_tag('%slug%', '([^&]+)');
    error_log("Правила переписывания добавлены");
});

add_filter('query_vars', function ($query_vars) {
    $query_vars[] = 'slug';
    return $query_vars;
});

Но переписывание не работает корректно, и я получаю 404 “страница не найдена”.

Я пытался реализовать render.php второй раз (первый раз – через block.json), но я думаю, что это не тот путь, так как я не получил свои атрибуты

add_filter('template_include', function ($template) {
    if (get_query_var('slug') == false || get_query_var('slug') == '') {
        require_once plugin_dir_path(__FILE__) . 'src/render.php';
        return $template;
    }
});

Ответ или решение

Проблемы с add_rewrite_rule в WordPress: Решение и Оптимизация

Создание пользовательских URL-адресов в WordPress может быть сложной задачей, особенно если вы работаете с плагинами и хотите, чтобы они корректно обрабатывались. В вашем случае вы пытаетесь настроить «читаемый» URL в формате http://localhost:4444/event/02-12-2024_artist_name, но получаете ошибку 404. Давайте разберем причины этой проблемы и как ее исправить.

1. Подключение к хукам

Первое, что стоит убедиться, это правильность подключения функций к хукам. Ваш код уже содержит следующий фрагмент:

add_action('init', function () {
    add_rewrite_rule('event/([a-z0-9-]+)[/]?$', 'index.php?slug=$matches[1]', 'top');
    add_rewrite_tag('%slug%', '([^&]+)');
    error_log("Rewrite rules added");
});

Здесь вы добавляете правило перезаписи и тег для переменной slug. Однако, для выполнения изменений вам необходимо сбросить перезапись правил. Сделать это можно, перейдя в админку WordPress: "Настройки" -> "Постоянные ссылки" и просто нажав на кнопку "Сохранить изменения". Это действие обновит правила перезаписи и должно решить проблему с 404.

2. Обработка пользовательских параметров в запросах

Вы также добавили фильтр для расширения переменных запроса:

add_filter('query_vars', function ($query_vars) {
    $query_vars[] = 'slug';
    return $query_vars;
});

Этот код выглядит корректно, так как он добавляет вашу переменную slug в список переменных запроса. Убедитесь, что он выполняется до вызова вашего правила перезаписи.

3. Подключение шаблонов

Код, который вы привели для подключения шаблона, может быть проблематичным:

add_filter('template_include', function ($template) {
    if (get_query_var('slug') === false || get_query_var('slug') == '') {
        require_once plugin_dir_path(__FILE__) . 'src/render.php';
        return $template;
    }
});

Здесь проверяется наличие параметра slug, но условие вероятно неверно. Вы хотите обработать случай, когда slug существует. Попробуйте изменить условие следующим образом:

add_filter('template_include', function ($template) {
    if (get_query_var('slug')) {
        require_once plugin_dir_path(__FILE__) . 'src/render.php';
        // Вернуть путь к шаблону, котрый вы и хотите использовать
        return plugin_dir_path(__FILE__) . 'src/your-template-file.php';
    }
    return $template; // Возвращаем оригинальный шаблон, если slug не существует
});

4. Проверка наличия файла render.php

Убедитесь, что файл render.php существует в указанной директории плагина, и корректно подключается. Это важный шаг для правильной работы вашего кода.

5. Тестирование и отладка

После внесения изменений не забудьте провести тестирование. Загружаем вашу страницу с новыми URL и отслеживаем ошибки в логах, которые может выдавать WordPress. Используйте error_log для записи логов, что позволит вам понять, где произошла ошибка.

Заключение

Проблемы с перезаписью правила в WordPress могут быть трудными для устранения, но следуя приведенным выше рекомендациям, вы сможете оптимизировать ваш код и добиться нужного функционала. Если вы будете следить за тем, чтобы правильно обновлять правила перезаписи и точно обрабатывать запросы, вы сможете избежать распространенных ошибок и создать профессиональный, удобный для пользователя интерфейс на основе URL-адресов.

Оцените материал
Добавить комментарий

Капча загружается...