Как получить ID страницы архива?

20 июл. 2015 г., 08:27:43
Просмотры: 29.2K
Голосов: 3

У меня есть страница WooCommerce для моих товаров, которая обрабатывается как страница архива. Мне нужно получить ID страницы архива, но очевидно, если я использую $post->ID или get_the_id(), и т.д., я получаю id самого последнего поста на этой странице.

1
Комментарии

Если любой из ответов был вам полезен, рассмотрите возможность его принятия. См. »Что следует делать, когда кто-то отвечает на мой вопрос?« и/или »Почему важно голосовать?«. Дополнительная информация о модели [wordpress.se] доступна в [справке].

Nicolai Grossherr Nicolai Grossherr
9 нояб. 2015 г. 14:11:03
Все ответы на вопрос 2
6

Если это настоящая страница, то вы можете получить её идентификатор с помощью функции get_queried_object_id(). Этот метод работает и возвращает ID на конкретных страницах, включая записи, категории, таксономии, метки и страницы авторов, где он используется. Однако архивы по дате и времени, а также главная страница не имеют ID.

Вы можете сделать следующее:

$page_id = get_queried_object_id();
echo $page_id;

Очень важное замечание: функция query_posts нарушает основной запрос, что ломает функциональность, описанную выше. Это приведёт к получению некорректных данных. Поэтому убедитесь, что вы никогда не используете query_posts.

20 июл. 2015 г. 08:46:12
Комментарии

Когда я использую этот код, получаю ID 0, хотя должно быть 6. Я не до конца уверен, как WooCommerce перебирает товары. Однако я знаю, что лучше не использовать query_posts

dcp3450 dcp3450
20 июл. 2015 г. 09:41:25

Тогда ваша страница — это не страница, а архивный шаблон, и в этом случае вы получите 0. Если вам нужно использовать страницу как архивную, при регистрации пользовательского типа записи нужно установить параметр has_archive в false, иначе ваш пользовательский шаблон страницы никогда не будет использоваться, а мой код всегда будет возвращать 0, как и ожидается. Не забудьте сбросить правила перезаписи после изменения

Pieter Goosen Pieter Goosen
20 июл. 2015 г. 09:46:46

Мне пришлось использовать get_option, предоставляемый WooCommerce

dcp3450 dcp3450
20 июл. 2015 г. 09:49:03

Что именно это означает?

Pieter Goosen Pieter Goosen
20 июл. 2015 г. 09:54:36

ID используется в плагине, который я написал. WooCommerce сохраняет этот ID в опции. Я углубился в изучение WooCommerce и обнаружил его таким образом.

dcp3450 dcp3450
20 июл. 2015 г. 21:50:52

Рад, что вы решили проблему. Ну, вы можете опубликовать это как ответ и принять его как правильный. ;-)

Pieter Goosen Pieter Goosen
20 июл. 2015 г. 21:55:00
Показать остальные 1 комментариев
1

Вам действительно нужно знать ID (для этого смотрите ответ @PieterGoosens) или вам просто нужно определить, находитесь ли вы в архиве типа записи product? Последнее можно легко проверить с помощью функции is_post_type_archive():

if ( is_post_type_archive( 'product' ) ) {
     // ваш код
}
20 июл. 2015 г. 10:32:08
Комментарии

Я использую ID страницы, чтобы получить настройку, сохранённую через пользовательский метабокс. Я обнаружил, что WooCommerce сохраняет это значение в качестве опции.

dcp3450 dcp3450
20 июл. 2015 г. 21:51:57