Waarom zou je het standaard post type uitschakelen in WordPress?

Simpelweg omdat soms het standaard post type niet nodig is.

Vele developers laten het standaard post type gewoonweg actief maar bij gebruikers zorgt dit best voor verwarring.

Duivel in een doos

Laat ons maar even de duivel uit de doos halen. Het post post type is een core WordPress integratie, dus echt volledig uitschakelen is echter niet mogelijk. Wat je wel kan doen is het post type verbergen voor gebruikers via onderstaande PHP class.

In de PHP class Disable_Default_Post_Type vind je volgende action hooks terug:

  • admin_menu – deze verwijdert het post post type uit het WordPress admin menu.
  • admin_bar_menu – deze verwijdert het post type uit de admin bar
  • init – deze zorgt ervoor dat de capabilities op do_not_allow worden geplaatst.
  • admin_init – deze zorgt ervoor dat alle admin edit urls worden doorverwezen naar het WordPress admin dashboard.
class Disable_Default_Post_Type {

    public function __construct() {
        add_action('admin_menu', array($this, 'remove_default_post_type_menu'));
        add_action('admin_bar_menu', array($this, 'remove_default_post_type_from_admin_bar'), 999);
        add_action('init', array($this, 'disable_default_post_type_capabilities'), 10);
        add_action('admin_init', array($this, 'redirect_default_post_type_page'));
    }

    public function remove_default_post_type_menu() {
        remove_menu_page('post-new.php');
    }

    public function remove_default_post_type_from_admin_bar() {
        global $wp_admin_bar;
        $wp_admin_bar->remove_node('new-post');
    }

    public function disable_default_post_type_capabilities() {
        $post_type = get_post_type_object('post');
        $post_type->cap->publish_posts = 'do_not_allow';
        $post_type->cap->edit_posts = 'do_not_allow';
        $post_type->cap->delete_posts = 'do_not_allow';
    }

    public function redirect_default_post_type_page() {
        global $pagenow;
        if ($pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'post') {
            wp_redirect(admin_url('index.php'), 301);
            exit;
        }
    }
}

// Instantiate the class
new Disable_Default_Post_Type();
PHP

Tags: