为什么我的自定义帖子类型显示在仪表板中,而不显示在我的网站上?

时间:2011-10-21 作者:jkupczak

我在函数中添加了以下代码。php文件创建自定义帖子类型。

  function create_post_type() {
      register_post_type( \'mysite_reviews\',
          array(  
              \'labels\' => array(  
                  \'name\' => __( \'Reviews\' ),
                  \'singular_name\' => __( \'Review\' )
              ),  
          \'public\' => true,  
          \'menu_position\' => 5,  
          \'rewrite\' => array(\'slug\' => \'reviews\')
          )  
      );  
  }  

add_action( \'init\', \'create_post_type\' );
然后我制作了一份我的单曲。名为single-mysite\\u reviews的php文件。php。

我转到Wordpress仪表板,自定义帖子类型显示在我的菜单中。我从新菜单创建了一个新帖子并发布了它。当我试图查看这篇新帖子时,我只能得到一个错误。或者更具体地说,本页:http://gointrigue.com/vanilla/reviews/my-site-reviews-custom-post-type/

我做错了什么?

2 个回复
最合适的回答,由SO网友:soulseekah 整理而成

flush_rewrite_rules() 注册自定义帖子类型后。看起来它们还没有被重写,这很可能就是为什么你会收到一条尴尬的消息。

register_post_type( \'mysite_reviews\',
        array(  
            \'labels\' => array(  
                \'name\' => __( \'Reviews\' ),
                \'singular_name\' => __( \'Review\' )
            ),  
        \'public\' => true,  
        \'menu_position\' => 5,  
        \'rewrite\' => array(\'slug\' => \'reviews\')
    )
);
flush_rewrite_rules(); // <- do this only once!
或者,您可以转到设置->永久链接->保存更改,这将调用flush_rewrite_rules() 为了你。

事实上http://gointrigue.com/vanilla/?post_type=mysite_reviews 显示您的帖子,这意味着由于缺少适当的规则,它没有被重写,而这些规则尚未刷新到数据库中。

SO网友:EarnestoDev

不太确定您想从描述中获得什么,但如果您想在循环中使用自定义帖子类型,请执行以下操作:

// Add the \'your_post_type\' postype to the loop.
add_action(\'pre_get_posts\', function(WP_Query $query){
    if(is_admin() or is_preview()){
        return;
    }
    // Only add them to the loop on Home/Front-Page
    if((is_home() or is_front_page()) and empty($query->query_vars[\'suppress_filters\']){
        // This has to be an array so fix it if required
        $post_types = $query->get(\'post_type\');
        if(empty($post_types)) $post_types = array(\'post\');
        elseif(is_string($post_types)) $post_types = array($post_types);
        // Add one or more CPT-s to the loop here (merge old with new)
        $query->set(\'post_type\', array_merge($post_types, array(
            \'your_post_type\',
            // \'another_post_type\',
            // \'maybe_another_post_type\',
    )));
    }
    return;
});
自定义post类型在使用时需要更多的手动调整。您不仅需要启用它们,还需要列出它们或将它们添加到循环中,创建存档(或至少链接到存档)。

PS: 代码使用PHP 5.3+闭包。将自己转换为PHP 5.2,作为赋值:)

结束

相关推荐