删除了自定义帖子类型存档页面显示博客页面

时间:2016-02-24 作者:Sander Koedood

在使用购买的模板创建的网站上,自定义帖子类型有一个存档页面。我不想要那个归档页面,所以我在子主题中更改了自定义帖子类型,如下所示:

function remove_archive(){
    $portfolio = get_post_type_object( \'portfolio\' );
    $portfolio->has_archive = FALSE;
    register_post_type( \'portfolio\', $portfolio );
}
add_action( \'init\', \'remove_archive\', 20 );
这将删除自定义post类型存档。然而,我的意图是释放url/公文包以用于页面。但即使在刷新永久链接、清除缓存等之后,url也不会指向页面。相反,它指向的是博客页面,该页面根本没有在设置中设置。

解决方案应该是/portfolio 是一页,并且/portfolio/* 是帖子的URL结构。然而,目前,这根本不起作用。

我错过什么了吗?

根据Pieter的评论,我添加了模板过滤器template_include:

function uncode_redirect_page($original_template) {
    global $is_redirect;
    $is_redirect_active = ot_get_option(\'_uncode_redirect\');
    if ($is_redirect_active === \'on\') {
        if(! is_user_logged_in() )
    {
        $is_redirect = true;
      return get_template_directory() . \'/redirect-page.php\';
    }
    }
    return $original_template;
}
add_filter(\'template_include\', \'uncode_redirect_page\');

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

如果您使用的是WordPress 4.4+(您应该使用它),那么可以使用register_post_type_args 用于调整传递给的参数的筛选器register_post_type() 注册帖子类型时。在子主题中,可以执行以下操作

add_filter( \'register_post_type_args\', function( $args, $post_type )
{
    // Make sure we only target the portfolio post type
    if ( \'portfolio\' !== $post_type )
        return $args;

    /**
     * We are currently registering the portfolio post type, lets continue
     * For debugging purposes, you can do the following inside the filter
     * ?><pre><?php var_dump($args); ?></pre><?php
     *
     * Modify the arguments as needed
     */
    $args[\'has_archive\'] = false;
    $args[\'rewrite\']     = true;

    return $args;   
}, PHP_INT_MAX, 2);
只需记住在添加过滤器后刷新重写规则即可。确保根据需要调整过滤器。这应该考虑模板加载,您应该看到在访问时在后端创建的加载页面http://example.com/portfolio/如果您创建的页面有portfolio, 即永久性结构http://example.com/portfolio/)。

如果这不起作用,那么您的主题中有导致此问题的内容,更可能是pre_get_posts 假定目标为portfolio 帖子类型页面。你也应该考虑一次糟糕的重写

编辑最后一个问题是template_include 问题中提到的筛选器是导致问题的原因。删除子主题中的过滤器并重新刷新永久链接解决了此问题

SO网友:Piyush Dhanotiya

归档页面是根据post类型的slug的名称创建的,因此如果您想将组合作为简单页面而不是归档页面,只需更改组合post类型的slug即可。这会解决你的问题。

$labels = array(
        \'name\'               => _x( \'Blog\', \'post type general name\', \'your-plugin-textdomain\' ),
        \'singular_name\'      => _x( \'Blog\', \'post type singular name\', \'your-plugin-textdomain\' ),
        \'menu_name\'          => _x( \'Blog\', \'admin menu\', \'your-plugin-textdomain\' ),
        \'name_admin_bar\'     => _x( \'Blog\', \'add new on admin bar\', \'your-plugin-textdomain\' ),
        \'add_new\'            => _x( \'Add New\', \'Blog\', \'your-plugin-textdomain\' ),
        \'add_new_item\'       => __( \'Add New Blog\', \'your-plugin-textdomain\' ),
        \'new_item\'           => __( \'New Blog\', \'your-plugin-textdomain\' ),
        \'edit_item\'          => __( \'Edit Blog\', \'your-plugin-textdomain\' ),
        \'view_item\'          => __( \'View Blog\', \'your-plugin-textdomain\' ),
        \'all_items\'          => __( \'All Blog\', \'your-plugin-textdomain\' ),
        \'search_items\'       => __( \'Search Blog\', \'your-plugin-textdomain\' ),
        \'parent_item_colon\'  => __( \'Parent Blog:\', \'your-plugin-textdomain\' ),
        \'not_found\'          => __( \'No Blog found.\', \'your-plugin-textdomain\' ),
        \'not_found_in_trash\' => __( \'No Blog found in Trash.\', \'your-plugin-textdomain\' )
    );

    $args = array(
        \'labels\'             => $labels,
        \'public\'             => true,

        \'publicly_queryable\' => true,
        \'show_ui\'            => true,
        \'show_in_menu\'       => true,
        \'query_var\'          => true,
        \'rewrite\'            => array( \'slug\' => \'test\' ),
        \'capability_type\'    => \'post\',
        \'has_archive\'        => true,
        \'hierarchical\'       => false,
        \'menu_position\'      => null,

        \'supports\'           => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\',)
    );
    register_post_type( \'Blog\', $args );

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c