Возможны ли динамические URL в WordPress

18 июн. 2014 г., 16:26:18
Просмотры: 14.3K
Голосов: 2

Я понимаю, что заголовок может показаться немного запутанным, но я ищу решение, которое возможно в Symfony или RoR. У меня есть страница с таким URL: http://mydomain.com/job/. Теперь я хочу такую структуру URL: http://mydomain.com/job/php-developer/45, http://mydomain.com/job/java-developer/46. Параметры после /job/ динамические, и это не отдельные страницы или записи, они относятся к странице job.

Возможно ли это в WordPress?

ОБНОВЛЕННЫЙ ВОПРОС:

Согласно ответу @Gioia я обновил свой код.

Вот мой текущий код:

add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
    $aVars[] = "job_title"; // Добавляем переменную job_title в запрос
    $aVars[] = "job_id";    // Добавляем переменную job_id в запрос
    return $aVars;
}

add_action( 'init', 'add_rules' );  
function add_rules() {
    // Добавляем правило перезаписи URL
    add_rewrite_rule('^/job/([^/]*)/([^/]*)/?','index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2]','top');
}

Сейчас я получаю страницу 404 при попытке открыть URL http://mydomain.com/job/php-dev/45. Но когда я пробую URL http://mydomain.com/index.php?page_id=13338&job_title=php-dev&job_id=45, всё работает.

7
Комментарии

Вы можете получить URL вида /job/job-title/ используя пользовательский тип записи, а /45 возможно реализовать с помощью пользовательской структуры для вашего типа записи.

Howdy_McGee Howdy_McGee
18 июн. 2014 г. 16:42:01

мои URL динамические, например /job/php-developer/45, /job/java-developer/46 и т.д.

Niraj Chauhan Niraj Chauhan
18 июн. 2014 г. 17:21:00

Какова цель цифр 45 / 46? Это счетчики? Что они означают, чтобы делать их динамическими?

Howdy_McGee Howdy_McGee
18 июн. 2014 г. 17:41:15

Моя цель — достичь URL вида http://mydomain.com/job/?title=php-developer&job_id=45, но чтобы URL был SEO-дружественным, я хочу получить что-то вроде http://mydomain.com/job/php-developer/45

Niraj Chauhan Niraj Chauhan
18 июн. 2014 г. 17:52:44

Где Job ID — это метазначение какого-то типа? Это не такая простая задача.

Howdy_McGee Howdy_McGee
18 июн. 2014 г. 18:05:55

@Howdy_McGee это какой-то ID, хранящийся в какой-то таблице

Niraj Chauhan Niraj Chauhan
18 июн. 2014 г. 18:35:59

Эй, не забудь обновить свой вопрос, чтобы убрать ошибочный символ / :)

Gioia Fueter Gioia Fueter
19 июн. 2014 г. 11:16:11
Показать остальные 2 комментариев
Все ответы на вопрос 1
8

Не совсем уверен, что понимаю, что вы имеете в виду под параметрами, относящимися к странице вакансии, но если вы имеете в виду, что разный контент загружается на одной и той же странице с использованием JavaScript/AJAX, вы можете использовать https://github.com/browserstate/history.js/ для генерации соответствующего URL для каждого состояния. Сложно сказать больше о реализации без дополнительной информации о вашей задаче.


ОБНОВЛЕНИЕ

Я считаю, что вам следует использовать пользовательские правила перезаписи (rewrite rules). Именно это WordPress использует для создания красивых URL, и у него есть API для добавления своих правил.

Сначала вам нужно добавить теги, которые вы хотите отслеживать — в вашем случае title и job_id. На самом деле, вероятно, стоит заменить title на что-то вроде job_title, так как title может вызвать конфликт, поскольку это зарезервированное слово в WordPress.

Я использовал следующий код, который нужно добавить в functions.php вашей темы:

add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
    $aVars[] = "job_title"; 
    $aVars[] = "job_id"; 
    return $aVars;
}  

Подробнее: http://codex.wordpress.org/Rewrite_API/add_rewrite_tag

Затем добавьте правило перезаписи, также в functions.php:

add_action( 'init', 'add_rules' );  
function add_rules() {
    add_rewrite_rule('^job/([^/]*)/([^/]*)/?','index.php?page_id=12&job_title=$matches[1]&job_id=$matches[2]','top');
}

Замените page_id на ID страницы вакансии. Подробнее: http://codex.wordpress.org/Rewrite_API/add_rewrite_rule.

После сохранения файла перейдите в Настройки → Постоянные ссылки и просто сохраните, не меняя ничего. Это гарантирует, что ваши настройки будут загружены корректно.

Вы можете установить плагин Rewrite Inspector, чтобы просмотреть все примененные правила перезаписи и убедиться, что ваше присутствует. https://wordpress.org/plugins/rewrite-rules-inspector/

Также можно установить плагин Debug Bar для проверки, какое правило перезаписи применяется к странице: https://wordpress.org/plugins/debug-bar/

Дополнительная информация о правилах перезаписи: http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/


ОБНОВЛЕНИЕ 2

Чтобы получить параметры:

if (isset($wp_query->query_vars['job_title'])) {
    $job_title = urldecode($wp_query->query_vars['job_title']);?>
<?php }
18 июн. 2014 г. 17:36:46
Комментарии

Моя цель — получить URL вида http://mydomain.com/job/?title=php-developer&job_id=45, но чтобы URL был SEO-дружественным, я хочу что-то вроде http://mydomain.com/job/php-developer/45

Niraj Chauhan Niraj Chauhan
18 июн. 2014 г. 17:47:03

Вы можете использовать пользовательские правила перезаписи URL:

Gioia Fueter Gioia Fueter
18 июн. 2014 г. 20:38:14

Привет, спасибо за ответ. Я попробовал ваш код, но он возвращает ошибку 404, пожалуйста, проверьте мои изменения в вопросе выше.

Niraj Chauhan Niraj Chauhan
19 июн. 2014 г. 10:07:20

Привет, я только что проверил код, и у меня он сработал. Сначала убедись, что ты изменил ID страницы, который был в коде (?page_id=12), на ID страницы с вакансиями (ID страницы можно увидеть при редактировании — это часть URL: post.php?post=6&action=edit, где 6 — это ID страницы). Также после каждого изменения не забудь зайти в настройки постоянных ссылок и сохранить изменения.

Gioia Fueter Gioia Fueter
19 июн. 2014 г. 10:36:40

Я изменил ID страницы на свой. Если я перехожу по этому URL index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2], то всё работает, но с пользовательским URL — нет. Нужно ли мне добавить add_rewrite_tag или внести изменения в .htaccess?

Niraj Chauhan Niraj Chauhan
19 июн. 2014 г. 10:39:51

Просто чтобы уточнить: ты заходил в настройки постоянных ссылок и сохранял изменения?

Gioia Fueter Gioia Fueter
19 июн. 2014 г. 10:41:43

Да, я сохранил постоянные ссылки, структура моих постоянных ссылок выглядит так: /%postname%/

Niraj Chauhan Niraj Chauhan
19 июн. 2014 г. 10:44:49

Давайте продолжим обсуждение в чате.

Gioia Fueter Gioia Fueter
19 июн. 2014 г. 10:49:58
Показать остальные 3 комментариев