Как страницы и сообщения отображаются в WordPress с URL-адресом? - PullRequest
1 голос
/ 30 октября 2019

Здравствуйте, я изучал WordPress и до сих пор я знал, как в основном работают сообщения и страницы в WordPress. Но я бродил, как WordPress находит конкретную страницу или сообщения для определенного URL.

Например;Если у меня есть страница с именем hello-world, то как WordPress показывает ее как localhost/wordpress/hello-world. Этот случай такой же в случае страниц тоже. Я хочу знать, как это действительно работает.

Сначала я подумал, что это можно сделать с помощью файла .htaccess, изменив URL или просто переименовав или удалив некоторые части URL, например localhost/wordpress/?page_name=hello-world, на localhost/wordpress/hello-world. Но я не могу найти его в WordPress .htaccess.

Помогите мне в этой проблеме.

1 Ответ

0 голосов
/ 30 октября 2019

Правило .htaccess

RewriteRule . /index.php [L]

означает, что URL-адреса, которые не соответствуют именам файлов в дереве документа, будут вызывать index.php. index.php в конечном итоге вызовет WP :: parse_request (). Эта функция проанализирует URL-адрес и сгенерирует запрос к базе данных, чтобы найти записи или страницы, которые соответствуют URL-адресу. Это довольно сложный алгоритм. parse_request () попытается сопоставить URL со своими правилами перезаписи. Если совпадение найдено, он создаст запрос к базе данных для извлечения совпадающих постов или страниц. parse_request () находится в файле ... / wp-includes / class-wp.php - вы можете прочитать его сами, но это нелегко - я понял это однажды, но забыл детали.

ADDENDUM

Я прочитал код и снова понял его. Это не так сложно. WordPress имеет базу данных правил перезаписи в таблице wp_options с параметром option_name "rewrite_rules". Правило перезаписи выглядит следующим образом:

[(.?.+?)(?:/([0-9]+))?/?$] => index.php?pagename=$matches[1]&page=$matches[2]

Оно отображает регулярные выражения в шаблоне URL. Это конкретное правило относится к страницам (на моем сайте другой веб-сайт может иметь другое правило)

URL http://localhost/tablepress-test/ соответствует этому правилу с массивом совпадений:

$matches=Array
(
    [0] => tablepress-test
    [1] => tablepress-test
)

parse_request() переписывает URL-адрес с использованием шаблона URL-адреса для:

index.php?pagename=tablepress-test&page=

parse_request (), а затем создает запрос к базе данных с помощью:

[query_vars] => Array
    (
        [page] => 
        [pagename] => tablepress-test
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...