Cum să elimini butonul "+Adaugă Categorie" din metabox-ul Categorii?

10 mar. 2017, 17:00:15
Vizualizări: 5.46K
Voturi: 1

Doresc să dezactivez butonul "+Adaugă Categorie" din metabox-ul Categorii, astfel încât oricine creează un articol să fie nevoit să aleagă doar din lista categoriilor existente.

  1. Am verificat un alt articol care pune practic aceeași întrebare, Cum să elimini linkul "+ Adaugă Categorie Nouă" din metabox-ul Categorii Dar răspunsul acceptat nu are sens, deoarece face referire la Liniile 345-367, care nu sunt relevante (poate din cauza actualizărilor WP, lucrurile s-au schimbat). Așadar, sunt confuz.

  2. Am instalat plugin-ul 'User Role Editor' și am eliminat capabilitatea 'manage_categories' pentru 'Editor', ceea ce a funcționat. Dar aș dori să o elimin pentru TOȚI utilizatorii, inclusiv admin și superadmin. Așa că am încercat să modific fișierul functions.php al temei astfel:

    add_action( 'add_meta_boxes', 'isa_remove_categories_meta_box' )
    function isa_remove_categories_meta_box() {
    
    remove_meta_box( 'categorydiv', 'post', 'side' );// elimină întregul box Categorii
    
    }
    

    Dar, acest lucru face să dispară întregul box Categorii. Există ceva cu care pot înlocui 'categorydiv' pentru a face doar '+Adaugă Categorie Nouă' să dispară?

Sau, poate cineva să-mi arate ce a vrut să spună răspunsul acceptat din celălalt articol prin liniile 345-367? Pot încerca și această variantă.

4
Comentarii

așa cum menționează OP în întrebarea pe care o legi, eu folosesc "hack-uri CSS pentru a o ascunde" atunci când doresc acest lucru.

Paul 'Sparrow Hawk' Biron Paul 'Sparrow Hawk' Biron
10 mar. 2017 17:05:10

Poți să dezvolți, te rog, cum să procedez cu hack-urile CSS? Ce fișiere CSS ar trebui să modific?

Ashwin Baskaran Ashwin Baskaran
10 mar. 2017 17:11:16

răspunsul la acea altă întrebare menționează și că "În prezent nu există un hook disponibil pentru a filtra output-ul". Acum aproximativ 10 zile am deschis un ticket Trac și am solicitat adăugarea unui astfel de filter (recunosc, dintr-un motiv diferit). Nu pare că echipa de nucleu a analizat măcar acel ticket, dar poate dacă tu (și alții) ați comenta pe el spunând că v-ar fi util și vouă, vor acționa.

Paul 'Sparrow Hawk' Biron Paul 'Sparrow Hawk' Biron
10 mar. 2017 17:12:48

În plugin-ul/tema ta adaugă următorul cod #category-adder { display: none ;} în orice CSS pe care îl încarci cu admin_enqueue_scripts

Paul 'Sparrow Hawk' Biron Paul 'Sparrow Hawk' Biron
10 mar. 2017 17:21:05
Toate răspunsurile la întrebare 3
1

Dacă construiești propria taxonomie, poți seta capabilitățile la înregistrarea taxonomiei. De exemplu...

<?php
    register_taxonomy(
        'members_tax',
        'post',
        array(
            'label'             => __( 'Membri' ),
            'hierarchical'      => true,
            'rewrite'           => array( 'slug' => 'members-tax' ),
            'capabilities'      => array(
                'assign_terms' => 'manage_options',
                'edit_terms'   => 'god',
                'manage_terms' => 'god',
            ),
            'show_in_nav_menus' => false,
        )
    );

Dacă dorești ca doar administratorul să poată adăuga sau edita, schimbă 'god' în 'administrator'. Acest lucru va elimina opțiunea "Adaugă o nouă categorie de membri" din metabox-ul de pe pagina de articole noi și va elimina link-ul din bara de meniu de sub articole.

Acest exemplu provine din acest gist https://gist.github.com/ChrisFlannagan/4cd3bfd0e853cda3d3f7898c59428ac2

7 aug. 2019 14:23:45
Comentarii

Urmărire. Dacă doriți ca orice utilizator să poată atribui termeni, eliminați 'assign_terms' => 'manage_options',

CDToad CDToad
7 aug. 2019 14:26:01
0

Am instalat plugin-ul 'User Role Editor' și am eliminat capacitatea 'manage_categories' pentru rolul 'Editor', ceea ce a funcționat. Dar aș dori să o elimin pentru TOȚI utilizatorii, inclusiv admin și superadmin.

Dacă eliminarea capacității 'manage_categories' din rolul de editor oferă funcționalitatea dorită, atunci poți elimina această capacitate din toate rolurile de utilizator destul de ușor, fie folosind un plugin existent, fie scriind un plugin nou care, la activare, elimină capacitatea din toate rolurile. Iată codul necesar pentru a elimina capacitatea din fiecare rol (de fapt, setează explicit capacitatea la false).

register_activation_hook( __FILE__, 'wpse_259647_remove_manage_categories_cap' );
function wpse_259647_remove_manage_categories_cap() {
  $roles = wp_roles();
  foreach( $roles->role_names as $slug => $name ) {
    $role = get_role( $slug );
    $role->add_cap( 'manage_categories', false );
  }
}

Aceasta nu va elimina capacitatea din "super admini" deoarece "super adminii" nu sunt tehnic un rol sau o capacitate.

Dacă dorești să revoci explicit capacitatea manage_categories de la toți utilizatorii, poți face și asta.

register_activation_hook( __FILE__, 'wpse_259647_remove_manage_categories_cap' );
function wpse_259647_remove_manage_categories_cap() {
  $users = get_users();
  foreach( $users as $user ) {
    $user->add_cap( 'manage_categories', false );
  }
}

Totuși, poate că aceasta nu va elimina capacitatea din "super admini", deoarece WordPress îi tratează diferit față de alți utilizatori.

10 mar. 2017 18:50:21
0

Metabox-ul categoriei este setat atunci când categoria este înregistrată cu funcția register_taxonomy. Comportamentul implicit al acestei funcții este de a seta callback-ul metabox-ului (meta_box_cb) la o funcție WordPress numită post_categories_meta_box. Aceasta este funcția care afișează butonul "+Adaugă Categorie". Din păcate, acest metabox nu vă permite să ascundeți selectiv acest buton. După cum au subliniat și alți răspunsători, acesta va ascunde acel buton în funcție de capacitatea edit_terms a taxonomiei, astfel încât îl puteți ascunde efectiv prin limitarea acestei capacități. Cu toate acestea, acest lucru nu funcționează dacă, ca mine, doriți să ascundeți acest buton fără a limita capacitățile.

Pentru a face acest lucru, trebuie să furnizați propriul meta_box_cb. Am făcut acest lucru copiind pur și simplu post_categories_meta_box și ștergând acel buton.

Funcția mea personalizată:

function custom_post_categories_meta_box_without_add_new( $post, $box ) {
    $defaults = array( 'taxonomy' => 'category' );
    if ( ! isset( $box['args'] ) || ! is_array( $box['args'] ) ) {
        $args = array();
    } else {
        $args = $box['args'];
    }
    $parsed_args = wp_parse_args( $args, $defaults );
    $tax_name    = esc_attr( $parsed_args['taxonomy'] );
    $taxonomy    = get_taxonomy( $parsed_args['taxonomy'] );
    ?>
    <div id="taxonomy-<?php echo $tax_name; ?>" class="categorydiv">
        <ul id="<?php echo $tax_name; ?>-tabs" class="category-tabs">
            <li class="tabs"><a href="#<?php echo $tax_name; ?>-all"><?php echo $taxonomy->labels->all_items; ?></a></li>
            <li class="hide-if-no-js"><a href="#<?php echo $tax_name; ?>-pop"><?php echo esc_html( $taxonomy->labels->most_used ); ?></a></li>
        </ul>
 
        <div id="<?php echo $tax_name; ?>-pop" class="tabs-panel" style="display: none;">
            <ul id="<?php echo $tax_name; ?>checklist-pop" class="categorychecklist form-no-clear" >
                <?php $popular_ids = wp_popular_terms_checklist( $tax_name ); ?>
            </ul>
        </div>
 
        <div id="<?php echo $tax_name; ?>-all" class="tabs-panel">
            <?php
            $name = ( 'category' === $tax_name ) ? 'post_category' : 'tax_input[' . $tax_name . ']';
            // Permite trimiterea unui set de termeni gol. 0 este un ID de termen invalid și va fi ignorat de verificările empty().
            echo "<input type='hidden' name='{$name}[]' value='0' />";
            ?>
            <ul id="<?php echo $tax_name; ?>checklist" data-wp-lists="list:<?php echo $tax_name; ?>" class="categorychecklist form-no-clear">
                <?php
                wp_terms_checklist(
                    $post->ID,
                    array(
                        'taxonomy'     => $tax_name,
                        'popular_cats' => $popular_ids,
                    )
                );
                ?>
            </ul>
        </div>
    </div>
    <?php
}

(Sper că pot include aici funcția mea personalizată care, după cum am menționat, este în mare parte copiată din WordPress. Dacă există motive legale pentru care nu pot face acest lucru, vă rog să-mi spuneți.)

Aplicat la taxonomia mea personalizată

register_taxonomy(
    "my_custom_taxonomy",
    "my_custom_type",
    array(
        ...
        'hierarchical'      => true,
        'meta_box_cb' => 'custom_post_categories_meta_box_without_add_new'
    )
);

Dezavantajul acestui lucru este că, spre deosebire de versiunea implicită, meta_box_cb-ul vostru nu se va actualiza dacă WordPress își actualizează stilurile.

Rețineți că acest lucru funcționează doar dacă vă înregistrați taxonomiile manual. Dacă utilizați un plugin, acesta poate să nu vă permită să configurați meta_box_cb.

5 nov. 2020 22:24:44