首页 文章

pre_get_posts主查询和后查询转发对象中的空值

提问于
浏览
0

我正在尝试为我的一些帖子类型(帖子,事件,议程)添加meta_query .

我有一些使用pre_get_posts的经验,我猜我只是挂钩它并检查每当帖子类型在数组中时,我会添加元 .

我不能总是得到你的帖子类型,详细情况:

加载首页(定义静态页面),里面包含3个查询:1个用于帖子(使用query_posts(),只定义了posts_per_page,因为帖子类型“post”是默认的) . 其他2个查询是get_posts(),因为它们不需要分页 .

现在我只是挂钩动作并转储提供的对象:

function my_pre_get($query) {
    var_dump($query);
}
add_action( 'pre_get_posts', 'my_pre_get');

会发生什么,操作在为页面加载执行的每个单独查询(主查询,我的query_posts和get_posts)上运行 . 但是在主查询中,我得到对象内的所有空值 . 在query_posts上我只得到我设置的分页值 . 在get_posts上我得到了帖子类型 .

现在我不知道要采取什么路线...我可以尝试实现一些复杂的检查以找出我所在的页面类型,然后假设post_type是post,但这似乎是一个可怕的低效和麻烦的想法 .

当查询即将运行并修改它时,是否有另一种方法可以始终获取帖子类型?

我也试过挂钩到parse_query,但结果相同 . :/

----编辑正如请求的那样,首页模板代码(你根本不认为这对主题有帮助):

<?php /*** Template Name: Front Page */ ?>
<!doctype html>
<html <?php language_attributes(); ?> >

<head>
    <?php wp_head(); ?>
</head>

<body>

    <?php wp_footer(); ?>

</body>

这个动作被添加到functions.php中,这已经是上面的内容了 .

2 回答

  • 0

    这是我最近用来检查帖子类型的查询

    function faq_query($query){
    
        if(isset($query->query['post_type'])) {
            if($query->query['post_type'] === 'faqs') {
                $query->set('posts_per_page',-1);
                $query->set('orderby', 'menu_order');
            }
        }
    
    }
    add_action('pre_get_posts', 'faq_query', 1 );
    

    这有帮助吗?

  • 0

    我对class-wp-query.php进行了深度循环,这是pre_get_posts的自然行为 .

    "Default"查询参数,如帖子类型,默认items_per_page ...等,都设置在一个非常复杂的"IF"集 . , after pre_get_posts动作中 .

    因此,在“默认”前端查询中,无论使用哪个挂钩,“post_type”将永远不会作为query_var使用 . 需要通过变通方法来确定当前帖子类型是否在main_query中是“post” .

    明确回答我的问题: No

相关问题