У меня есть сайт WordPress, и я хотел бы подражать тому, как определенные новостные агентства и порталы генерируют свои URL-адреса.
Например, у вас есть статья под названием «Мужчина любит женщину», и программа CMS создаст URL-адрес, подобный следующему:
https://example.com/man-loves-woman/55123
Где 55123
реальный идентификатор статьи, так
https://example.com/man-does-not-love-woman/55123
вернет ту же статью, пока реальный идентификатор, 55123
не изменено Неважно, какая последовательность возможна, не так ли? %postname%/%id%
или же %id%/%postname%
Прямо сейчас у меня есть пользовательская настройка постоянной ссылки:
/%postname%/%year%%monthnum%%day%
Я не особенно рад этому, я хотел бы иметь это /%postname%/%unique_id%
где %postname%
генерируется так по умолчанию, но это не имеет значения, каково его значение, так как %unique_id%
неизменен.
Я смотрю на wp-includes/link-template.php
а также rewrite.php
, но я не очень разбираюсь в PHP, но если кто-то может указать мне правильное направление, я был бы благодарен, у меня есть некоторое общее представление о том, как все это работает, с правильным толчком, который я мог бы проследить и понять это на мой собственный.
Возможно, я смотрю на все это неправильно и должен сосредоточиться на Nginx позади него и установить правило перезаписи, которое вставляет %postname%
который может быть чем угодно и просто использовать Default в настройках постоянных ссылок WordPress, который производит:
https://example.com/?p=123
Если вы хотите отобразить уникальный идентификатор сообщения после его имени, вы можете сделать это из Custom Structure
внутри настроек постоянной ссылки WordPress, добавив эту структуру.
/%postname%/%post_id%
Он не работает на localhost, но работает на веб-сайте.
Вы должны посмотреть в add_rewrite_rule. Добавьте следующий код functions.php
add_action( "init", "so_27051693_permalink" );
function so_27051693_permalink() {
//This rule will match : man-loves-woman/55123
add_rewrite_rule(
'^([^/]*)/([0-9]+)/?',
'index.php?p=$matches[2]',
'top' );
//This rule will match : 55123/man-loves-woman
add_rewrite_rule(
'^([0-9]+)/([^/]*)/?',
'index.php?p=$matches[1]',
'top' );
}
В обоих случаях пост будет получен с использованием post_id. Обязательно сбросьте правила перезаписи, сохранив постоянные ссылки.