在我的自定义帖子类型的模板包含过滤器中,既不能访问$ post也不能访问get_post_type()

时间:2013-11-14 18:10:44

标签: wordpress wordpress-plugin

我正在尝试应用template_include过滤器来从我的插件中扩充模板。 我见过很多人使用以下内容获得成功:

function include_template_files($template_file) {
  global $post;
  $plugindir = dirname( __FILE__ );
  if ('mycustomposttype' == get_post_type()){
    $templatefilename = 'mytemplate.php';
    $template = $plugindir . '/theme_files/' . $templatefilename;
    return $template;
  }
  return $template_file;
}
add_filter( 'template_include', 'include_template_files' );

get_post_type()返回空,并且我的自定义帖子没有实例化$ post。这适用于WP类型(帖子,页面等)。 我做错了什么?

我正在使用WP 3.7.1,而我正在使用默认的二十三主题。

更新

我以这种方式注册我的类型:

function register_mycustom_post_type() {
        register_post_type( 'mycustomposttype', array(
            'labels' => array(
                'name' => 'My posts',
                'singular_name' => 'My post',
                'menu_name' => 'My posts',
                'add_new' => 'New custom post',
                'add_new_item' => 'Add new custom post',
            ),
            'public' => true,
            'show_ui' => true,
            'menu_icon' => plugins_url('myicon.png',__FILE__),
            'supports' => array( 'title' ,'thumbnail', 'editor' ),
        ) );
    }
add_action('init','register_mycustom_post_type');

第二次更新(部分解决方案):

问题是永久链接重写。如果我使用默认URL(index.php?...),它可以正常工作。

为我的帖子类型添加正确的重写选项解决了这个问题:

'rewrite' => array(
                'slug' => 'mytype',
                'with_front' => false
),

3 个答案:

答案 0 :(得分:0)

尝试使用get_queried_object()这样的功能

$queried = get_queried_object();
print_r($queried);

您应该获取并反对当前页面中的信息

答案 1 :(得分:0)

我自己回答。问题是永久重写。 将以下内容添加到register_post_type选项解决了问题:

'rewrite' => array(
            'slug' => 'mytype',
            'with_front' => false
),

答案 2 :(得分:0)

有时这也可以起作用:

get_query_var( 'post_type' );