如何从管理工具栏中删除默认帖子类型

时间:2018-02-05 作者:Paul Keister

我们正在配置一个新的WordPress以使用自定义的帖子类型,我们希望编辑器登录并只查看自定义的帖子类型,而不是默认的“帖子”帖子类型。我们可以使用以下命令从管理菜单中删除“post”this trick, 但仍保留“+新建”管理工具栏按钮,其中包含一个帖子选项,默认为创建帖子。是否有一种简单而安全的方法可以从“新建”工具栏按钮中删除帖子和/或隐藏“新建”工具栏按钮?

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

您需要钩住3个不同的操作钩子才能完全隐藏默认的帖子类型。但是,仍然可以通过URL直接访问默认帖子。那么,让我们开始吧。

侧菜单

add_action( \'admin_menu\', \'remove_default_post_type\' );

function remove_default_post_type() {
    remove_menu_page( \'edit.php\' );
}

新+的;在管理栏中发布链接

add_action( \'admin_bar_menu\', \'remove_default_post_type_menu_bar\', 999 );

function remove_default_post_type_menu_bar( $wp_admin_bar ) {
    $wp_admin_bar->remove_node( \'new-post\' );
}
管理栏中的+新链接
function remove_add_new_post_href_in_admin_bar() {
    ?>
    <script type="text/javascript">
        function remove_add_new_post_href_in_admin_bar() {
            var add_new = document.getElementById(\'wp-admin-bar-new-content\');
            if(!add_new) return;
            var add_new_a = add_new.getElementsByTagName(\'a\')[0];
            if(add_new_a) add_new_a.setAttribute(\'href\',\'#!\');
        }
        remove_add_new_post_href_in_admin_bar();
    </script>
    <?php
}
add_action( \'admin_footer\', \'remove_add_new_post_href_in_admin_bar\' );


function remove_frontend_post_href(){
    if( is_user_logged_in() ) {
        add_action( \'wp_footer\', \'remove_add_new_post_href_in_admin_bar\' );
    }
}
add_action( \'init\', \'remove_frontend_post_href\' );
快速草稿仪表板小部件
add_action( \'wp_dashboard_setup\', \'remove_draft_widget\', 999 );

function remove_draft_widget(){
    remove_meta_box( \'dashboard_quick_press\', \'dashboard\', \'side\' );
}

SO网友:vtq

另一种解决方案,但与Stefan和Rafa的类似。这不会引发错误,如果您直接导航到/wp admin/edit,请注意。php您将无法查看帖子列表(默认帖子类型),也无法对其进行编辑。

注意:此代码实际上并没有禁用默认的帖子类型,即现有的帖子类型仍将通过公共URL发布和访问。它有效地禁用了所有用户对默认帖子类型的后端访问。

function remove_default_post_type($args, $postType) {
    if ($postType === \'post\') {
        $args[\'public\']                = false;
        $args[\'show_ui\']               = false;
        $args[\'show_in_menu\']          = false;
        $args[\'show_in_admin_bar\']     = false;
        $args[\'show_in_nav_menus\']     = false;
        $args[\'can_export\']            = false;
        $args[\'has_archive\']           = false;
        $args[\'exclude_from_search\']   = true;
        $args[\'publicly_queryable\']    = false;
        $args[\'show_in_rest\']          = false;
    }

    return $args;
}
add_filter(\'register_post_type_args\', \'remove_default_post_type\', 0, 2);

SO网友:Stefan

原则上,可以使用unregister_post_type(). 不幸的是,这对于_builtin 职位类型。

或者,可以更改编辑/创建/删除/…所需的功能。。。特定职位类型的职位。您可以使用register_post_type_args 筛选以更改默认设置所需的功能post 岗位类型。将所有功能设置为false 将导致任何人都无法访问默认的帖子类型。WordPress足够聪明,可以自动隐藏导航条目。

add_filter(\'register_post_type_args\', function($args, $postType){
    if ($postType === \'post\') {
        $args[\'capabilities\'] = [
            \'edit_post\' => false,
            \'read_post\' => false,
            \'delete_post\' => false,
            \'edit_posts\' => false,
            \'edit_others_posts\' => false,
            \'publish_posts\' => false,
            \'read\' => false,
            \'delete_posts\' => false,
            \'delete_private_posts\' => false,
            \'delete_published_posts\' => false,
            \'delete_others_posts\' => false,
            \'edit_private_posts\' => false,
            \'edit_published_posts\' => false,
            \'create_posts\' => false,
        ];
    }

    return $args
}, 0, 2);

SO网友:rafa226

Stefan的解决方案很好,但如果激活调试,您可以在wp includes/capabilities中看到:未定义的偏移量:0。php第62plus行有一个缺失;返回后$args

详尽的代码应为:

add_filter(\'register_post_type_args\', function($args, $postType){
    if ($postType === \'post\' && current_user_can( \'create_posts\' ) && current_user_can( \'edit_post\' ) ) {
        $args[\'capabilities\'] = [
            \'edit_post\' => false,
            \'read_post\' => false,
            \'delete_post\' => false,
            \'edit_posts\' => false,
            \'edit_others_posts\' => false,
            \'publish_posts\' => false,
            \'read\' => false,
            \'delete_posts\' => false,
            \'delete_private_posts\' => false,
            \'delete_published_posts\' => false,
            \'delete_others_posts\' => false,
            \'edit_private_posts\' => false,
            \'edit_published_posts\' => false,
            \'create_posts\' => false,
        ];
    }
    return $args;
}, 0, 2);

结束

相关推荐