Wordpress: как преобразовать сгенерированный URL-адрес (постоянную ссылку) в красивый URL-адрес?

В плагине я создаю ссылку на категорию с разбивкой на страницы,
т. е. http://localhost/?cat=17&paged=5. Категория известна по slug и id.

Есть ли способ преобразовать этот URL-адрес в определяемый пользователем формат "хорошей постоянной ссылки",
т. е. http://localhost/category/foo/page/5?

(Предполагая, что мы используем Wordpress 2.8/2.9+)

Редактировать: Поскольку есть некоторые недопонимания относительно того, чего я пытаюсь достичь, вот что у меня есть:

  • Идентификатор категории
  • Номер страницы (т.е. пятая страница архива этой категории)

С этими данными я могу создать URL-адрес этой страницы, который будет, например, http://localhost/?cat=17&paged=5, и это работает хорошо. Проблема носит визуальный характер: если у пользователя включены красивые постоянные ссылки, то это не очень хорошо вписывается. Вопрос: как мне получить правильную, красивую постоянную ссылку (например, http://localhost/category/foo/page/5) из (или для) имеющейся у меня информации?

Изменить 2: очевидно, что если у пользователя отключены красивые постоянные ссылки, то красивых постоянных ссылок не будет. Я это знаю, и это на самом деле не является предметом вопроса... На данный момент давайте просто предположим, что у пользователя есть произвольная настройка постоянной ссылки. Я генерирую ссылку, и она должна выглядеть так, как хочет пользователь.


person sunside    schedule 20.03.2010    source источник
comment
Не можете ли вы просто изменить их на панели параметров постоянной ссылки? выбрав «Пользовательский» и введя /% postname%/, это будет похоже на то, что у вас есть, если этот плагин каким-то образом не изменит URL-адреса?   -  person Marty    schedule 22.03.2010
comment
Боюсь, я не улавливаю сути. Мой плагин ничего не знает о структуре постоянных ссылок, которую установил пользователь. На данный момент я могу обратиться к странице, на которую создаю ссылку, только по идентификатору категории и номеру страницы. Я ищу какой-то фильтр, который изменяет этот сгенерированный URL-адрес на любую структуру, настроенную пользователем.   -  person sunside    schedule 22.03.2010
comment
есть настройка в администрировании-›настройки-›постоянные ссылки   -  person    schedule 22.03.2010
comment
@fuzzy lollipop: я знаю об этой настройке, и это то, чего я хочу добиться. Теперь вопрос: как Wordpress это делает, где скрыто волшебство и как я могу (неправильно) использовать его для себя? :)   -  person sunside    schedule 23.03.2010


Ответы (6)


Вы смотрели WP_Rewrite?

person Manzabar    schedule 22.03.2010
comment
Да, но я не уверен, как использовать его для этой задачи. - person sunside; 23.03.2010
comment
Знаете ли вы какие-либо примеры использования WP_Rewrite для этой цели? Все, что я могу найти, это как добавить новые теги постоянных ссылок и т. д. (Кодекс снова наиболее полезен...) - person sunside; 23.03.2010
comment
Извините, но я тоже не пользовался. Я еще немного покопался в Кодексе и наткнулся на Rewrite API, может быть, это поможет? codex.wordpress.org/Rewrite_API - person Manzabar; 24.03.2010
comment
К сожалению нет. Насколько я понимаю, это работает наоборот, позволяя анализировать хорошую постоянную ссылку в переменные $_GET. Спасибо большое! - person sunside; 25.03.2010

Соответствует ли All In One SEO вашим требованиям? На самом деле я купил «профессиональную» версию примерно за 30 долларов США, и она того стоила.

person Tony    schedule 22.03.2010
comment
К сожалению нет. Кажется, он не переписывает URL-адреса. - person sunside; 23.03.2010

Моя установка Wordpress (2.9.2) делает это автоматически - канонические URL-адреса уже некоторое время встроены в Wordpress. Возможно, ваш плагин отключить эту функцию?

person shipshape    schedule 22.03.2010
comment
Нет, определенно нет. (Если вы добавите <?php echo 'http://localhost/?cat=17&paged=5'; ?> или любую подобную ссылку где-нибудь в своей теме, вы увидите проблему.) - person sunside; 23.03.2010
comment
Я только что попробовал это с моей темой, и Wordpress правильно интерпретировал URL-адрес и перенаправил меня на нужную страницу в соответствии с моими настройками постоянной ссылки. Вы используете 2.9.2? - person shipshape; 24.03.2010
comment
Возможно, я неправильно понимаю вашу проблему - если вы просто повторяете URL-адрес в виде строки, Wordpress ничего с этим не сделает. Но если вы сделаете это ссылкой и нажмете на нее, вы должны быть перенаправлены на правильную страницу. - person shipshape; 24.03.2010
comment
Проблема не в редиректе, проблема в том, что он выглядит некрасиво. :) - person sunside; 03.05.2010
comment
Поместите нужный номер страницы в переменную с именем $pagenumber и попробуйте следующее: ‹a href=‹?php echo get_category_link( $category_id ) . постранично/ . $ номер страницы; ?››Ссылка на категорию‹/a› - person shipshape; 03.05.2010
comment
Мне нужно проверить это, но в худшем случае я выдам localhost/?cat=17 /paged=5, в результате чего в качестве идентификатора категории будет 17/paged=5. WP анализирует это? - person sunside; 04.05.2010

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

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

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

Это то, что ты искал?

person jtlowe    schedule 15.05.2010

Правильным способом создания ссылки будет использование get_category_link и add_query_arg

В вашем примере будет работать следующее:

$category_link = add_query_arg( array('paged' => 5), get_category_link($category->term_id));

Это сгенерирует URL-адрес, и Wordpress перенаправит на нужную страницу.

person Jonathan    schedule 15.10.2014

проверьте эту страницу, она довольно хорошо объясняет довольно постоянные ссылки. http://codex.wordpress.org/Using_Permalinks

Вы должны найти эти настройки в

Wordpress->Настройки->Постоянные ссылки

я думаю

/%категория%/%имя_записи%

в том направлении, которое вы хотите

Вы также можете попробовать перенаправить свой URL-адрес с помощью htaccess, вот несколько примеров:

[http://]perishablepress.com/press/2008/02/06/permalink-evolution-customize-and-optimize-your-dated-wordpress-permalinks/

Извините, darf bis jetzt nur ein link posten pfft... :-(

С уважением, Махатманыч

person mahatmanich    schedule 02.05.2010
comment
Alles schön und gut - und danke für die Antwort - aber jeder Hier beantwortet hier beantwortet alles mögliche, nur nicht meine Frage! :/ В моем блоге есть красивые постоянные ссылки и все функции, которые очень важны. Wenn ich jetzt ein Plugin schreibe, habe ich als Programmier aber keine Ahnung davon, был der Benutzer в шляпе seinem Blog eingestellt. Ichsuche eine Möglichkeit, einen Link zu einer Seite so zu generieren, dass er sich in die Einstellungen des Blogs einfügt. Nen hässlichen Link generieren, der seinen Zweck erfüllt, ist kein Problem - einen schönen zu generieren allerdings zu schon. - person sunside; 03.05.2010
comment
JA AAABER ... Ich verstehe jetzt besser was du meinst, solange der Bloguser aber kein mod_rewrite angestellt hat, keine .htaccess datei angelegt hat, und oder keine settings under permalinks gesetzt hat lauefst du gegen eine wand ... und da hilft dir auch nicht das dein plugin dann ein довольно переписать macht. Ohne die einstellungen geht es nun mal einfach nicht. - person mahatmanich; 03.05.2010
comment
du kannst nach php mod_rewrite checken, und dann vielleicht nach den settings die der user in wordpress eingestellt hat, das sollte sich aus der Datenbank rausziehen lassen ... und dann wuerde ich darauf aufbauen ... - person mahatmanich; 03.05.2010
comment
@Markus @mahatmanich Можем ли мы оставить контент на английском языке для блага сообщества? Там обсуждение по теме... - person Marc Gravell; 04.05.2010
comment
@Marc - Абсолютно, я только что объяснил по-немецки, что я сказал в вопросе. :) - person sunside; 04.05.2010