0

所以我以前用过它pre_get_postsfunctions.php它就像一个魅力,但由于某种原因,我无法弄清楚为什么它不适用于archive-product.php我拥有的 WooCommerce 页面。

目录结构:

.
├──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' );

问题:为什么我必须声明global $wp_query(默认情况下应该初始化),为什么帖子不是我选择的类别?

4

1 回答 1

0

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

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

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

此外,如果您尝试检查显示页面的主页,请考虑使用is_front_page().

对于您关于声明的其他问题$wp_query,不幸的是我没有答案。

于 2016-11-30T09:45:21.713 回答