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

Если это настоящая страница, то вы можете получить её идентификатор с помощью функции get_queried_object_id()
. Этот метод работает и возвращает ID на конкретных страницах, включая записи, категории, таксономии, метки и страницы авторов, где он используется. Однако архивы по дате и времени, а также главная страница не имеют ID.
Вы можете сделать следующее:
$page_id = get_queried_object_id();
echo $page_id;
Очень важное замечание: функция query_posts
нарушает основной запрос, что ломает функциональность, описанную выше. Это приведёт к получению некорректных данных. Поэтому убедитесь, что вы никогда не используете query_posts
.

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

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

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

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