$ post-> ID отображает неверный ID
-
-
Вы просто пытаетесь получить этот конкретный идентификатор или хотите иметь некоторые _ общие функции_ для работы с идентификаторами?В первом случае вы можете использовать `get_option ('page_for_posts');`.Are you just trying to get that specific ID, or do you want to have some _general functionality_ dealing with the IDs? If the first is the case, you could use `get_option('page_for_posts');`.
- 1
- 2013-08-08
- tfrommen
-
Я пытался получить значение метабокса,поэтому общая функциональность,связанная с идентификаторами,в любом случае теперь решена,спасибо за ваше время!I was trying to get metabox value, so general functionality dealing with the IDs, anyways it's resolved now, thanks for your time!
- 0
- 2013-08-08
- Wordpressor
-
Вот аналогичная тема: https://wordpress.stackexchange.com/questions/150192/at-my-posts-archive-page-outside-the-loop-get-the-id-returns-the-top-most-poHere's a similar thread: https://wordpress.stackexchange.com/questions/150192/at-my-posts-archive-page-outside-the-loop-get-the-id-returns-the-top-most-po
- 0
- 2019-03-05
- Pikamander2
-
1 ответ
- голосов
-
- 2013-08-08
<цитата>На этой странице $post-> ID возвращает идентификатор первого сообщения в блоге для данного страница.
Вот как это работает.
<цитата>$post
устанавливается на первое сообщение в ленте. На отдельных сообщениях и страницах это то же самое,что и сообщение или страница. На страницах архива это первая запись в результирующем наборе. И если вдуматься,то и другое на самом деле одно и то же. Одиночные сообщения и страницы имеют только один результат в наборе,который соответствует ожидаемому сообщению или странице.А теперь самое сложное: я попытался удалить все петли со всех своих страниц,полностью стертый файл loop.php,отключил все виджеты,которые могло повлиять на $post,но он по-прежнему возвращает неправильный идентификатор.
Основной запрос выполняется перед загрузкой шаблона и в этом процессе устанавливается
<цитата>$post
. Удаление элементов из шаблона не изменит этого.Есть подсказки?
Да. Не полагайтесь на
$post
,кроме как внутри правильного цикла. Если вам нужна информация о самой странице,используйте:$pobj = get_queried_object(); var_dump($pobj); // debugging
Ссылка:
http://codex.wordpress.org/Function_Reference/get_queried_object
On that page $post->ID returns the ID of first blog post for given page.
That is how it works.
$post
is set to the first post in the Loop. On single posts and pages that is the same as the post or page. On archive pages it is the first post in the result set. And if you think about that, both are really the same thing. Single posts and pages only have one result in the set which happens to match the post or page that you expect.Now, the tricky part, I've tried to remove all the loops from all my pages, totally erased loop.php file, disabled all the widgets that might have been affecting $post and it still returns the wrong ID.
The main query runs before your template loads and
$post
is set in that process. Removing things from the template won't change that.Any hints?
Yes. Don't rely on
$post
except inside a proper Loop. If you need information about the page itself use:$pobj = get_queried_object(); var_dump($pobj); // debugging
Reference:
http://codex.wordpress.org/Function_Reference/get_queried_object
-
Умно,никогда раньше не слышал об этом решении.Clever, I have never heard about this solution before.
- 0
- 2013-08-08
- Wordpressor
Это довольно странно.
Этот код:
Отображает правильный идентификатор каждый раз,за исключением страницы блога (страница,заданная как блог на/wp-admin/options-reading.php).
На этой странице $post-> ID возвращает идентификатор первого сообщения в блоге для данной страницы.
Теперь сложная часть: я попытался удалить все циклы со всех своих страниц,полностью стер файл loop.php,отключил все виджеты,которые могли влиять на $post,и он по-прежнему возвращает неправильный идентификатор.
Есть подсказки?
Мойindex.php довольно стандартный:
И loop.php:
Может быть,проблема в том,что я пытаюсь получить идентификатор в header.php?
И да,
wp_reset_postdata()
,похоже,тоже не помогает:/