Как получить 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
dcp3450
Тогда ваша страница — это не страница, а архивный шаблон, и в этом случае вы получите 0. Если вам нужно использовать страницу как архивную, при регистрации пользовательского типа записи нужно установить параметр has_archive в false, иначе ваш пользовательский шаблон страницы никогда не будет использоваться, а мой код всегда будет возвращать 0, как и ожидается. Не забудьте сбросить правила перезаписи после изменения
Pieter Goosen
ID используется в плагине, который я написал. WooCommerce сохраняет этот ID в опции. Я углубился в изучение WooCommerce и обнаружил его таким образом.
dcp3450
Вам действительно нужно знать ID (для этого смотрите ответ @PieterGoosens) или вам просто нужно определить, находитесь ли вы в архиве типа записи product? Последнее можно легко проверить с помощью функции is_post_type_archive():
if ( is_post_type_archive( 'product' ) ) {
// ваш код
}