WooCommerce pre_get_posts
WooCommerce pre_get_posts
所以我之前在我的 functions.php
中使用过 pre_get_posts
,它就像一个魅力,但出于某种原因,我无法弄清楚为什么它不适用于 WooCommerce 页面 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>";
}
输出 posts 但 posts 与 functions.php
代码中设置的类别无关 $query->set( 'cat', '7815' );
问题:为什么我必须声明global $wp_query
(它应该默认初始化),为什么post不是来自类别我选了?
在页面中时,您看到的查询是具有一页的类别,该页面基本上就是您看到的页面。它不是您希望在主页上看到的帖子列表。
如果你有一个普通的博客风格的主页并且你检查查询你可以看到 [found_posts] => 4
。但尝试将 'page' 设置为主页并检查您的查询。您可以看到 [found_posts] => 1
并且在您的查询中找到的一项 (post/page) 是当前一项。
您可以尝试在页面模板中使用 Wordpress WP_Query
class 添加自定义查询,它也为您提供了很多选择。
此外,如果您要检查正在显示页面的主页,请考虑使用 is_front_page()
。
以及关于声明 $wp_query
的其他问题,很遗憾,我没有答案。
所以我之前在我的 functions.php
中使用过 pre_get_posts
,它就像一个魅力,但出于某种原因,我无法弄清楚为什么它不适用于 WooCommerce 页面 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>";
}
输出 posts 但 posts 与 functions.php
代码中设置的类别无关 $query->set( 'cat', '7815' );
问题:为什么我必须声明global $wp_query
(它应该默认初始化),为什么post不是来自类别我选了?
在页面中时,您看到的查询是具有一页的类别,该页面基本上就是您看到的页面。它不是您希望在主页上看到的帖子列表。
如果你有一个普通的博客风格的主页并且你检查查询你可以看到 [found_posts] => 4
。但尝试将 'page' 设置为主页并检查您的查询。您可以看到 [found_posts] => 1
并且在您的查询中找到的一项 (post/page) 是当前一项。
您可以尝试在页面模板中使用 Wordpress WP_Query
class 添加自定义查询,它也为您提供了很多选择。
此外,如果您要检查正在显示页面的主页,请考虑使用 is_front_page()
。
以及关于声明 $wp_query
的其他问题,很遗憾,我没有答案。