实际上你离pre_get_posts
, 在添加自己的帖子之前,您只需首先获取查询中的当前帖子类型。
此外,我建议使用$priority
属于99
这样动作就跟在其他动作之后pre_get_posts
挂钩,这意味着如果用户添加了自己的CPT(或内置的帖子类型),它们将被下面的函数检测和包含(但您可以根据需要进行更改)。
add_action(\'pre_get_posts\', \'djg_includ_my_cpt_in_query\', 99);
function djg_includ_my_cpt_in_query($query){
if(is_home() && $query->is_main_query()) : // Ensure you only alter your desired query
$post_types = $query->get(\'post_type\'); // Get the currnet post types in the query
if(!is_array($post_types) && !empty($post_types)) // Check that the current posts types are stored as an array
$post_types = explode(\',\', $post_types);
if(empty($post_types)) // If there are no post types defined, be sure to include posts so that they are not ignored
$post_types[] = \'post\';
$post_types[] = \'document\'; // Add your custom post type
$post_types = array_map(\'trim\', $post_types); // Trim every element, just in case
$post_types = array_filter($post_types); // Remove any empty elements, just in case
$query->set(\'post_type\', $post_types); // Add the updated list of post types to your query
endif;
return $query;
}
编辑构建最终查询时,WordPress检查“post\\u type”是否为空,如果为空,则执行以下代码-
$where .= " AND $wpdb->posts.post_type = \'post\'";
$post_type_object = get_post_type_object ( \'post\' );
所以,当我们添加一个CPT时,WordPress认为我们想要忽略帖子,因为它没有显式声明。这就是我的场景的不同之处——我之前明确声明了其他post类型,因此它们被包括在调用中
$post_types = $query->get(\'post_type\');
.
所以,在你的情况下,我们可以合理地总结一下,如果$post_types
为空,则用户不希望修改查询的该部分,以便可以手动将“post”添加到$post_types
大堆这应该(希望如此!)达到理想的结果