我正在尝试为我的一些帖子类型(帖子,事件,议程)添加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 回答
这是我最近用来检查帖子类型的查询
这有帮助吗?
我对class-wp-query.php进行了深度循环,这是pre_get_posts的自然行为 .
"Default"查询参数,如帖子类型,默认items_per_page ...等,都设置在一个非常复杂的"IF"集 . , after pre_get_posts动作中 .
因此,在“默认”前端查询中,无论使用哪个挂钩,“post_type”将永远不会作为query_var使用 . 需要通过变通方法来确定当前帖子类型是否在main_query中是“post” .
明确回答我的问题: No