WooCommerce pre_get_posts

时间:2016-10-15 23:26:12

标签: php wordpress woocommerce hook-woocommerce

所以我之前在pre_get_posts中使用了functions.php,它就像一个魅力,但由于某种原因,我无法弄清楚为什么它不适用于WooCommerce页面{{1}我有。

目录结构:

archive-product.php

内部. ├──woocommerce | ├── archive-product.php ├── functions.php

functions.php

内部function specific_category( $query ) { if ( $query->is_home() && $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' );(默认情况下应该初始化)以及为什么不是我选择的类别中的帖子?

1 个答案:

答案 0 :(得分:0)

在页面中,您看到的查询是一个页面的类别,该页面基本上就是您正在看到的页面。它不是您希望在主页上看到的帖子列表。

如果您有一个普通的博客式主页,并且您查看了查询,则可以看到[found_posts] => 4。但尝试将“页面”设置为主页并检查您的查询。您可以看到[found_posts] => 1,查询中找到的项目(帖子/页面)是当前项目。

您可以尝试在页面模板中添加Wordpress WP_Query类的自定义查询,它也为您提供了很多选项。

此外,如果您要检查显示网页的主页,请考虑使用is_front_page()

关于声明$wp_query的其他问题,遗憾的是我没有答案。