Самый ранний хук для надежного получения $ post / $ posts

8

Какое самое раннее возможное действие, которое я могу подключить, когда я смогу получить доступ к глобальным $post/$postsпеременным как на передней, так и на задней части? Я пытался просматривал ссылки Кодекса , ссылки Адама Брауна и скользя через источник несколько раз , но не везло найти хороший.

pre_get_postsслишком рано; Использование posts_selectionне работает, если вы хотите сделать второй вызов get_posts () во время обратного вызова; и template_redirectне работает на стороне администратора. the_postможет быть раньше, чем template_redirectдля переднего конца, но он также не работает на заднем конце. В идеале я хотел бы что-то, что работает прямо перед get_post()/get_posts()возвращением, но я не вижу ничего подобного.

Я использовал the_postsфильтр в прошлом, но я бы предпочел действие, потому что оно более технически правильно.

Прямо сейчас я просто подключаюсь дважды; один раз используя template_redirectдля переднего конца, и снова используя admin_xml_nsдля заднего конца. Однако мне это не очень нравится, поскольку моя логика семантически не связана ни с одним из этих хуков, и кажется, что это очень распространенная необходимость, и должен быть хук, подобный post_get_posts (ala pre_get_posts), который работает с обеих сторон.

Ян Данн
источник

Ответы:

12

Для всех страниц администратора и страниц интерфейса, кроме отдельных экранов редактирования записей ( wp-admin/post.php), 'wp'это наиболее надежный способ получения глобальных значений.

http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-includes/class-wp.php.source.html#l486

Вы можете видеть там, что это стреляет немедленно после WP::main()огней WP::register_globals(). Проблема с использованием таких вещей, как post_resultsи в get_postsтом, что он будет запускаться каждый раз, когда вы делаете запрос для сообщений. 'wp'запускается только в функции WP::main(), которая используется ядром WP для выполнения основного запроса страницы.

Для экранов редактирования постов это выглядит так, как если бы вы могли надежно использовать первый хук 'add_meta_boxes'. Вам просто нужно убедиться, что вы находитесь на основной странице при подключении, хотя она передает глобальный $postобъект в качестве второго аргумента (первый $post_typeиз которых является текущим сообщением).

Джон П Блох
источник
4

posts_resultsфильтр необработанного результата запроса см линии 2627 в wp-includes/query.php.

Milo
источник