jonathan
  • 0
Новичок

Необходимо зафиксировать «ключевое слово», добавленное в конец сообщения, даже с «красивыми постоянными ссылками»

  • 0

У меня есть скрипт, который я написал некоторое время назад, и только что решил «портировать» его в плагин WP.

Все работает отлично, за исключением одной части жизненно важной основной функциональности.

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

В частности, он позволяет использовать такие URL-адреса:

http://www.domain.com/имя-страницы/моё-ключевое слово/

затем он будет использовать «имя страницы» для создания фактического содержимого страницы, а «мое ключевое слово» передается другим функциям сценария для других целей.

Если в WP постоянные ссылки по умолчанию, то все работает нормально. Но как только «красивые постоянные ссылки» используются, мои правила перезаписи конфликтуют с правилами WP, и эта функция перестает работать. Вместо этого WP генерирует ошибку 404, как и следовало ожидать, поскольку запрошенный URL-адрес страницы не существует.

Поэтому мне нужен способ включить настраиваемые постоянные ссылки, такие как, например, /%postname%/, но при этом иметь возможность добавлять информацию после имени сообщения в URL-адресе. Мой оригинальный скрипт мог сделать даже это:

http://www.domain.com/имя-страницы/куча/из/вещей/можно-идти/в/здесь/и/будет/будет/игнорировано/мое-ключевое слово/

и он по-прежнему будет использовать «имя страницы» для контента и «мое ключевое слово» в качестве ключевого слова, игнорируя все между ними. Я хотел бы эту функциональность и с WP, но пока не смог найти решение.

Вот исходный код перезаписи моего скрипта:

RewriteBase /wp
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [S=44]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [S=44]
RewriteRule ^(.*)$ index.php?k=$1&%{QUERY_STRING}

А вот что WP генерирует по умолчанию, когда я устанавливаю постоянные ссылки на /%postname%/:

RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]

Я бы предпочел не требовать от пользователя какого-либо редактирования htaccess, вместо этого обрабатывая это через мой плагин, если это возможно. Подобрались близко, но не совсем.

Есть идеи?

Спасибо!

Джонатан

Share
  1. Если пользователь решит не включать красивые постоянные ссылки, я буду уважать его решение не включать их.

    Два возможных варианта:

    1. Просто скажите, что для работы плагина требуются красивые постоянные ссылки.
    2. В качестве запасного варианта просто добавьте ключевое слово в строку запроса, если красивые постоянные ссылки не включены.

    РЕДАКТИРОВАТЬ

    Возможно, попробуйте этот учебник для расширения правил перезаписи WP ?

    По сути, правила перезаписи представляют собой массив, поэтому вы создаете функцию, которая извлекает массив, манипулирует им и затем возвращает его; затем вы подключаете этот массив к generate_rewrite_rules крючку.

    Вы также можете указать, что делает плагин WP Access Control.

    • 0
    • Боюсь, суть упущена. Функция, которую особенно ХОТЯТ мои пользователи, заключается в том, чтобы передавать свое ключевое слово в самом URL-адресе, а не в параметре строки запроса. Но в WP плагин должен учитывать, что у них может быть другая структура постоянных ссылок по умолчанию. Я не могу отменить то, что они установили. На самом деле мне все равно, какие у них настройки постоянных ссылок, мне просто нужно, чтобы плагин работал так, как задумано в отношении входящего ключевого слова.

      • 0
    • Боюсь, моя точка зрения была упущена: если пользователям нужны красивые постоянные ссылки, им нужно включить красивые постоянные ссылки — независимо от того, является ли отображаемая постоянная ссылка постоянной ссылкой, сгенерированной WordPress, или добавленным вами ключевым словом.

      • 0
    • Боюсь, это не так просто, возможно, мне нужно объяснить яснее. Если пользователь устанавливает мой плагин на существующий сайт WP, который использует пользовательскую «красивую» структуру постоянных ссылок, он не может ОТКЛЮЧИТЬ свои красивые постоянные ссылки только для того, чтобы удовлетворить мой плагин. Требования плагина полностью отделены от остальной части их сайта. Ему нужно СОБСТВЕННОЕ правило постоянных ссылок, которое работает совершенно независимо от остальной части сайта.

      • 0
    • Хорошо, тогда, возможно, я неправильно понял ваш первоначальный вопрос. Я думал, вы говорите, что проблема существовала, когда у пользователей не были включены красивые постоянные ссылки, и что она уже работала в случае, когда у пользователя были включены красивые постоянные ссылки. Было ли это недоразумением?

      • 0
    • Да, действительно, все наоборот. Если выбраны постоянные ссылки по умолчанию, то мой исходный код htaccess работает нормально (поскольку нет другого кода, с которым можно было бы конфликтовать). Но как только выбрана другая структура, мой код конфликтует. Я хотел бы решить эту проблему на PHP, а не на взломе mod_rewrite, и, похоже, для этого есть некоторые функции и крючки, но они немного выше моей головы… Я смотрю на codex.wordpress.org/ Class_Reference/WP_Rewrite, но не могу понять, как работать с ним на лету, как мне нужно.

      • 0
    • Интересно… Однако я не уверен, что это действительно поможет в моем случае, поскольку проблема в том, что когда мой плагин используется по назначению, нет строки запроса, пользователь просто передает ключевое слово как часть самого URL.. Таким образом, нет «исходной строки запроса», которую можно добавить к…

      • 0
    • Исходная строка запроса является существующей (вы должны иметь ее, иначе ничего не отображается). Может быть, вы хотите взглянуть на плагин Jan Fabrys WPSE Rewrite Analyze в нашем репозитории.

      • 0
  2. В дополнение к предложению @Chip Bennets:

    Вы можете проверить Справочник по параметрам, чтобы проверить красивую структуру постоянных ссылок/постоянных ссылок.

    Есть встроенная функция add_query_arg() , которая позволяет добавлять к исходной строке запроса.

    • 0

Оставить ответ

You must login to add an answer.