#php #wordpress #woocommerce #hook-woocommerce
#php #wordpress #woocommerce #hook-woocommerce
Вопрос:
Итак, я использовал pre_get_posts
functions.php
это раньше, и это работает как шарм, но по какой-то причине я не могу понять, почему это не работает для моей страницы WooCommerce archive-product.php
.
Структура каталогов:
.
├──woocommerce
| ├── archive-product.php
├── functions.php
Внутри functions.php
:
function specific_category( $query ) {
if ( $query->is_home() amp;amp; $query->is_main_query() ) {
$query->set( 'cat', '7815' );
}
}
add_action( 'pre_get_posts', 'specific_category' );
Внутри archive-product.php
:
var_dump($wp_query); //this should be the main query variable but doesn't exist.
Затем я попробовал это внутри archive-product.php
:
global $wp_query;
foreach($wp_query->posts as $k){
print_r($k);
echo "<br>";
echo "<br>";
}
Который выводит сообщения, но сообщения не относятся к категории, установленной в functions.php
коде $query->set( 'cat', '7815' );
Вопрос: Почему я должен объявлять global $wp_query
(по умолчанию он должен быть инициализирован) и почему сообщение не из выбранной мной категории?
Ответ №1:
Когда вы находитесь на странице, запрос, который вы видите, — это категория с одной страницей, которая в основном является страницей, которую вы видите. Это не список сообщений, который вы ожидали увидеть на главной странице.
если у вас есть обычная домашняя страница в стиле блога, и вы проверяете запрос, который вы можете увидеть [found_posts] => 4
. но попробуйте установить «страницу» в качестве домашней страницы и проверьте свой запрос. Вы можете видеть [found_posts] => 1
, что один найденный элемент (сообщение / страница) в вашем запросе является текущим.
Вы можете попробовать добавить пользовательский запрос с WP_Query
классом WordPress в свой шаблон страницы, и это тоже даст вам много возможностей.
Кроме того, если вы пытаетесь проверить домашнюю страницу, на которой отображается страница, рассмотрите возможность использования is_front_page()
.
и на ваш другой вопрос об объявлении $wp_query
, к сожалению, у меня нет ответа.