Модератор
Юрій
(@yube)
Соображений нет. Впрочем, и запроса такого тоже нет. Зато есть куча других сомнительных запросов опций от twentyfourteen.
Впрочем, и запроса такого тоже нет.
Запроса этого нет в том случае, если «красивые ссылки» установлены.
И меня терзают сомнения в его «такой» необходимости..
Модератор
Юрій
(@yube)
ЧПУ включено (/%postname%/
), а запроса нет. Есть один FROM wp_options
:
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
(WordPress 3.9.1 с темой оформления Twenty Twelve. Плагин Debug Bar.)
И не должно быть, ибо опция rewrite_rules имеет флаг autoload
Юрий, так я про то и говорю:
Если есть эта строка rewrite_rules
, то она имеется в результатах первого запроса и второго запроса не делается.
А если ее нет (пермалинки отключены), то зачем-то делается второй запрос.. Вот я и думаю о его целесообразности..
В коде пока не смотрел, может там комментарии какие есть, но интерес уже переходит из статуса «спортивный» в «О_о» :))
Модератор
Юрій
(@yube)
Я бы поставил вопрос иначе: не «зачем», а «кем» 😉
а «кем» 😉
Так то понятно.. Чистым WP 🙂 Даже темы нет. Склоняюсь к варианту «зачем» 😀
Модератор
Юрій
(@yube)
Под «кем» можно подразумевать и внутреннюю функцию 🙂
Как я понял, западло кроется в том, что при отключении ЧПУ WP тупо грохает опцию rewrite_rules
вместо того, чтобы просто очистить. В результате строка
$this->rules = get_option('rewrite_rules');
функции wp_rewrite_rules() делает лишний запрос в базу.
Повозился сначала с wp_rewrite_rules
. В-общем, ситуация там запутанная, если кратко :-). А вот с get_option()
более-менее все понятно.
https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/option.php#L25
Если блог установлен, то проверяется наличие опции isset(..'rewrite_rules')
в строке 72, а ее нет по причине отсутствия 🙂 (не ставили мы ЧПУ).
Затем, в блоке «отсутствия» происходит попытка взять опцию из кеша в строке 75, но ее и там нет.
В третьем блоке (строки 77-78) происходит попытка выборки данной опции еще раз путем отдельного запроса в БД.. Вот здесь и возникает недоразумение, по-моему..
Предлагаю изменить строку 77 на:
if ( false === $value && 'rewrite_rules' != $option ) {
Да и со страницами тоже необъяснимое творится..
[1]SELECT ID, post_name, post_parent, post_type
FROM wp_posts
WHERE post_name IN ('bla')
AND post_type IN ('page','attachment')
[2]SELECT * FROM wp_posts WHERE ID = 7 LIMIT 1
[3]SELECT ID, post_name, post_parent, post_type
FROM wp_posts
WHERE post_name IN ('bla')
AND post_type IN ('page','attachment')
Наверное у меня двоится в глазах уже, но я вижу, что 1 и 3 запросы полностью идентичны..
А может я не тот PHP использую, раз тут много лишнего 😀
Весь лог приводить не стал, вокруг-да-около ~5 запросов ). А всего-лишь внутри is_page
—
лан, на досуге разберемся )
Предлагаю изменить строку 77 на:
if ( false === $value && 'rewrite_rules' != $option ) {
Добавлять лишнюю проверку в функцию get_option()
, которая может вызываться несколько десятков или сотен раз при загрузке страницы, разработчики не будут.
Думаю, более правильным решением было бы при отключённых постоянных ссылках не удалять опцию rewrite_rules
, а заменять на пустое значение.
Написал в багтрекер: https://core.trac.wordpress.org/ticket/29107.