经过一些测试后,我发现很遗憾,不可能在内部获得cpt的post类型pre_get_posts
钩只有is_page
在那里可以检索到作品,但不能检索到标准岗位类型或cpt。
如果您只有page and post(无cpt),请检查is_single()
具有true
as response意味着post类型是post,因为它对页面返回false。
如果你也有CPT恐怕you have to perform an additional query. 我能想到的最简单的方法就是post_type
post status为publish且post\\U name为必填项的列(跳过修订):
function test( $q ) {
if ( is_single() ) {
global $wpdb;
$type = $wpdb->get_var( $wpdb->prepare(
"SELECT post_type FROM $wpdb->posts WHERE post_name = %s AND post_status = \'publish\' AND post_type <> \'revision\'",
$q->query[\'name\']
) );
var_dump($type);
}
}
add_action( \'pre_get_posts\', \'test\', 1);
如果要检查特定的post类型,可以编写一个自定义条件标记,该标记只对具有给定post\\u类型和给定名称的行进行计数:
function is_single_post_type( $type = \'post\' ) {
if ( is_single() ) {
global $wpdb, $wp_query;
$is = $wpdb->get_var( $wpdb->prepare(
"SELECT count(ID) FROM $wpdb->posts WHERE post_name = %s AND post_status = \'publish\' AND post_type = %s",
$wp_query->query[\'name\'], $type
) );
return $is > 0;
}
return false;
}
当然这是必要的
pre_get_post
, 在以后的任何挂钩中,您都可以使用
get_post_type()
...