Cum să eliminăm tipul implicit de postare din bara de administrare

5 feb. 2018, 05:30:30
Vizualizări: 21.2K
Voturi: 11

Configurăm un WordPress nou pentru a utiliza tipuri de postări personalizate și dorim ca editorii noștri să se conecteze și să vadă doar tipurile de postări personalizate, nu tipul implicit de postare 'post'. Am reușit să eliminăm 'post' din meniul Admin folosind această metodă, dar asta lasă încă butonul "+ Nou" din bara de administrare, care conține o opțiune de postare și în mod implicit creează o postare. Există o modalitate simplă și sigură de a elimina postarea din butonul nou din bara de instrumente și/sau de a ascunde butonul nou din bara de instrumente?

2
Comentarii

Dacă eliminați capabilitățile legate de postări din rolul de Editor (sau oricare altul pe care îl folosiți), aceste opțiuni nu ar trebui să apară.

Jacob Peattie Jacob Peattie
5 feb. 2018 05:38:30

Dacă tipul de postare refuză să se dezînregistreze, iar funcția "register_post_type" nu se află în functions.php, verificați dacă înregistrarea este salvată într-un "must use plugin". Ca o reamintire, plasez acest comentariu la începutul fișierului meu functions.php "/ dacă ceva este blocat, căutați în must use plugins!!! /"

Dave Miller Dave Miller
22 apr. 2023 15:53:20
Toate răspunsurile la întrebare 4
2
17

Trebuie să folosești 3 acțiuni (hooks) diferite pentru a ascunde complet tipul de postare implicit. Totuși, accesul direct la postarea implicită prin URL rămâne posibil. Deci, să începem.

Meniu Lateral

add_action( 'admin_menu', 'remove_default_post_type' );

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

Legătura + New > Post din Bara de Administrare

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' );
}

Legătura + New din Bara de Administrare

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' );

Widget-ul Quick Draft din Panoul de Control

add_action( 'wp_dashboard_setup', 'remove_draft_widget', 999 );

function remove_draft_widget(){
    remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
}
5 feb. 2018 16:21:21
Comentarii

Aceasta este cea mai curată metodă, deși butonul New din bara de administrare încă indică către post-new.php - poate fi dezactivat cu puțin JavaScript, de exemplu $(document).on('click', '#wp-admin-bar-new-content', function(){ return false })

Mina Mina
27 iul. 2019 13:39:46

Această soluție pare să funcționeze fără probleme, dar: "Prinț privire" încă afișează postările (și nu afișează CPT-urile în niciun caz!), la fel ca secțiunea "Următorii pași" din elementul de dashboard "Bun venit în WP" [pe care îl urăsc și îl ignor oricum]. De asemenea, "Activitate" ar putea încă afișa postări, dar nu ar trebui dacă ai configurat totul corespunzător.

user3445853 user3445853
25 mar. 2021 22:55:42
0
14

O alternativă, dar similară soluție cu cea a lui Stefan și Rafa. Aceasta nu aruncă erori și observați că dacă navigați direct la /wp-admin/edit.php nu veți putea vizualiza lista de articole (tipul de postare implicit), nici să le editați.

Rețineți că acest cod nu dezactivează efectiv tipul de postare implicit, adică postările existente vor rămâne publicate și accesibile prin URL-uri publice. Acesta dezactivează eficient accesul din backend la tipul de postare implicit pentru toți utilizatorii.

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);
4 ian. 2020 09:03:45
4

În principiu, este posibil să dezînregistrezi tipurile de postări deja înregistrate folosind unregister_post_type(). Din păcate, acest lucru nu este posibil pentru tipurile de postări _builtin.

Ca alternativă, este posibil să modifici capabilitățile necesare pentru a edita/crea/șterge/... postări pentru un anumit tip de postare. Poți folosi filtrul register_post_type_args pentru a schimba capabilitățile necesare pentru tipul implicit de postare post. Setând toate capabilitățile la false, nimeni nu va avea acces la tipul implicit de postare. WordPress este destul de inteligent pentru a ascunde automat intrările din navigație.

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);
5 feb. 2018 16:42:35
Comentarii

Mulțumesc, am introdus acest cod într-o funcție care a fost declanșată la evenimentul 'init', dar nu pare să fi avut niciun efect asupra interfeței mele de utilizator. Am folosit greșit evenimentul?

Paul Keister Paul Keister
5 feb. 2018 19:48:37

Este prea târziu. WordPress înregistrează toate tipurile de postări _builtin la acțiunea init, dar cu o prioritate de 0.

Codul de mai sus înregistrează doar un filtru, nu trebuie să-l pui în interiorul unei alte acțiuni/filtre, scrie-l direct în functions.php al temei tale, de exemplu.

Stefan Stefan
5 feb. 2018 20:47:33

+1. Problema este că aruncă 3 notificări. "Notice: Undefined offset: 0 in /var/www/html/wp-includes/capabilities.php on line 70". Nu am reușit să scap de ele.

noway noway
17 nov. 2019 13:37:41

Rețineți că aceasta nu elimină taxonomiile "category" și "post_tag", astfel încât elementul din meniul de navigare "Articole" rămâne (deși fără posibilitatea de a vizualiza sau edita articolele în sine).

W Biggs W Biggs
22 iul. 2020 18:31:32
1

Soluția lui Stefan este excelentă, dar dacă activezi debug-ul poți vedea: Undefined offset: 0 în wp-includes/capabilities.php pe linia 62 plus că lipsește un ; după return $args

Codul exhaustiv ar trebui să fie:

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);
18 mar. 2019 12:20:48
Comentarii

current_user_can aruncă o eroare. Nu este definită încă în această etapă.

noway noway
17 nov. 2019 13:59:09