{"id":14954952,"url":"https://github.com/anatolykulikov/wp-custom-router","last_synced_at":"2025-10-24T07:30:34.517Z","repository":{"id":225801015,"uuid":"766853412","full_name":"anatolykulikov/wp-custom-router","owner":"anatolykulikov","description":"Класс для создания кастомного роутинга для WordPress","archived":false,"fork":false,"pushed_at":"2024-03-04T09:25:40.000Z","size":4,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-29T08:11:44.922Z","etag":null,"topics":["wordpress","wordpress-development"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anatolykulikov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-04T08:52:54.000Z","updated_at":"2024-11-27T13:33:00.000Z","dependencies_parsed_at":"2024-03-04T12:09:25.493Z","dependency_job_id":null,"html_url":"https://github.com/anatolykulikov/wp-custom-router","commit_stats":null,"previous_names":["anatolykulikov/wp-custom-router"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anatolykulikov%2Fwp-custom-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anatolykulikov%2Fwp-custom-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anatolykulikov%2Fwp-custom-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anatolykulikov%2Fwp-custom-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anatolykulikov","download_url":"https://codeload.github.com/anatolykulikov/wp-custom-router/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237932060,"owners_count":19389560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["wordpress","wordpress-development"],"created_at":"2024-09-24T13:10:17.227Z","updated_at":"2025-10-24T07:30:34.238Z","avatar_url":"https://github.com/anatolykulikov.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WordPress CustomRoute\n\nКласс для создания кастомного роутинга для различных задач:\n- создания полноценных html-страниц без необходимости добавлять их в административной панели\n- REST-like ответов в формате JSON\n- имеет возможность проверять наличие авторизованного пользователя и возвращать объект данного пользователя\n\nВ классе `CustomRoute` имеются 3 функции:\n- `parseRoute` - основная функция, которая проверяет текущий адрес запроса на вхождение и поддерживает указание переменных; возвращает пустой массив, если путь не удовлетворяет условию, или массив с параметрами, если данный путь прошёл проверку.\n- `responseHtml` - возвращает ответ в формате html\n- `responseJson` - возвращает ответ в формате json\n\nВ настоящее время `parseRoute` может работать только с латинскими строками (кириллическое написание пока не поддерживается).\n\nФункции `responseHtml` и `responseJson` также устанавливают `http_response_code === 200` для того, чтобы ответ воспринимался как существующий адрес.\n\n\n## Пример использования\n\nРоуты указываются в файле `core.php`. Необходимо задать проверяемый путь (с указанием нужных переменных) и функцию-обработчик:\n```php\nadd_action('wp', 'customRouter');\nfunction customRouter()\n{\n    global $wp;\n    switch (true) {\n\n        case ($request = CustomRoute::parseRoute('magic-page/{value1}/{value2}', $wp-\u003erequest)): {\n            CustomRoute::responseHtml(otherHandler($request['value1'], $request['value2']));\n        }\n\n        case ($request = CustomRoute::parseRoute('any-action/{filter1}/{filter2}', $wp-\u003erequest)): {\n            CustomRoute::responseJson(anotherHandler($request['filter1'], $request['filter2']));\n        }\n\n        default: return null;\n    }\n}\n```\n\nДополним пример функциями-обработчиками:\n```php\n\nfunction otherHandler(string $filter1, string $filter2): string\n{\n    $user = wp_get_current_user();\n\n    return(\n        '\u003cp\u003elogin: '. $user-\u003euser_login .'\u003c/p\u003e' .\n        '\u003cp\u003efilter1: '. $filter1 .'\u003c/p\u003e' .\n        '\u003cp\u003efilter2: '. $filter2 .'\u003c/p\u003e'\n    );\n}\n\n\nfunction anotherHandler(string $filter1, string $filter2): array\n{\n    if(!is_user_logged_in()) return accessDeniedJson();\n\n    $user = wp_get_current_user();\n\n    return [\n        'user' =\u003e [\n            'login' =\u003e $user-\u003euser_login,\n            'nicename' =\u003e $user-\u003euser_nicename,\n            'role' =\u003e current($user-\u003eroles)\n        ],\n        'filter1' =\u003e $filter1,\n        'filter2' =\u003e $filter2\n    ];\n}\n\n\nfunction accessDeniedJson(): array\n{\n    return [\n        'code' =\u003e 401,\n        'message' =\u003e 'access denied'\n    ];\n}\n```\n\nНе забудьте подключить файл `core.php` в `functions.php`.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanatolykulikov%2Fwp-custom-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanatolykulikov%2Fwp-custom-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanatolykulikov%2Fwp-custom-router/lists"}