Impostare Opzioni Schermo e Ordine Metabox Predefiniti per Admin

6 set 2010, 02:44:19
Visualizzazioni: 21.5K
Voti: 31

Sto cercando disperatamente un modo (qualsiasi modo) per impostare le "opzioni schermo" predefinite e l'ordine dei metabox attraverso il file functions.php. Qualcuno può fornire un aiuto in merito?

1
Commenti

Aggiornamento 2014: Per chi ha solo bisogno di riordinare le meta box, vedi la risposta di Nabil qui sotto.

rinogo rinogo
11 ago 2017 00:10:34
Tutte le risposte alla domanda 3
13
25

Impostare l'ordine delle meta box nelle pagine di modifica dei post

Dovrai rimuovere le meta box e aggiungerle nuovamente nell'ordine desiderato.

Per disabilitare le meta box: (personalizza secondo le tue esigenze, controlla l'id della metabox nel codice html per sapere quale nome usare come primo parametro delle funzioni)

function my_remove_meta_boxes() {

    remove_meta_box('postcustom', 'post', 'core');

    remove_meta_box('commentsdiv', 'post', 'core');

    ...
}

add_action( 'admin_menu', 'my_remove_meta_boxes' );

Dopo averle rimosse, puoi usare la funzione add_meta_box per aggiungerle nelle nuove posizioni: http://codex.wordpress.org/Function_Reference/add_meta_box. L'ordine delle meta box dipende dall'ordine in cui chiami la funzione add_meta_box. Esempio: con il seguente snippet, la meta box dei commenti apparirà prima di quella dei campi personalizzati.

function my_add_meta_boxes( $post_type, $post ) {
    if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
        add_meta_box('commentsdiv', __('Commenti'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Campi personalizzati'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

Potresti voler dare un'occhiata al file wp-admin/edit-form-advanced.php

Impostare quali colonne del titolo mostrare nella pagina dell'elenco dei post

Devi usare il filtro manage_{$post_type}_posts_columns. Esempio: il seguente snippet rimuoverà la colonna dei commenti.

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Impostare i risultati predefiniti da mostrare nella pagina dell'elenco dei post

Usa i filtri 'edit_{$post_type}_per_page' e 'edit_posts_per_page'.

function my_edit_post_per_page( $per_page, $post_type ) {

    $edit_per_page = 'edit_' . $post_type . '_per_page';
    $per_page = (int) get_user_option( $edit_per_page );
    if ( empty( $per_page ) || $per_page < 1 )
        $per_page = 1;

    return $per_page;
}

add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );

Per indirizzare uno specifico tipo di post:

  • usa add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' ); es. add_filter( 'edit_post_per_page', 'my_edit_post_per_page' ); per i post, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' ); per le pagine.

  • oppure usa una condizione all'interno della tua funzione. es.:

    function my_edit_post_per_page( $per_page, $post_type ) {

    if( $post_type == 'post' ) {
        $edit_per_page = 'edit_' . $post_type . '_per_page';
        $per_page = (int) get_user_option( $edit_per_page );
        if ( empty( $per_page ) || $per_page < 1 )
            $per_page = 1;
    }
    
    
    return $per_page;
    
6 set 2010 11:02:57
Commenti

Scusa, forse non mi sono spiegato correttamente. Mi riferivo alle meta box nella pagina di modifica dei post nell'area di amministrazione, così come all'impostazione del numero predefinito di post da visualizzare nella pagina dell'elenco dei post in amministrazione.

NetConstructor.com NetConstructor.com
6 set 2010 11:13:16

quindi tecnicamente questa non è una domanda, ma in realtà sono 2 domande?

Tom J Nowell Tom J Nowell
6 set 2010 11:18:16

Ho modificato la mia risposta. Fammi sapere se hai bisogno di maggiori dettagli.

sorich87 sorich87
6 set 2010 11:41:46

@sorich87 grazie per la tua risposta, tuttavia da quello che ricordo non c'era modo di specificare l'ordine esatto di ogni metabox o sbaglio? Forse dovrei essere un po' più specifico. Sto fondamentalmente cercando vari frammenti di codice che mi permettano di pre-impostare diverse opzioni per tutti gli utenti senza dover accedere a ogni account. Esempi: impostare l'ordine esatto dei metabox nelle pagine di modifica dei post, impostare quali colonne del titolo vengono mostrate nella pagina dell'elenco dei post, impostare i risultati predefiniti da visualizzare nella pagina dell'elenco dei post... cose del genere. Grazie in anticipo.

NetConstructor.com NetConstructor.com
7 set 2010 07:41:29

Ho modificato la mia risposta.

sorich87 sorich87
7 set 2010 10:17:53

Grazie per la tua risposta. Ho appena provato a utilizzare il codice che hai fornito per impostare il numero predefinito di post nell'elenco amministrativo dei post, tuttavia sembra non funzionare. È necessario fare qualcosa di specifico se si sta cercando di modificare il numero predefinito di risultati per un tipo di post specifico? In tal caso, esiste un modo per impostarlo per tutte le pagine dell'elenco dei post?

NetConstructor.com NetConstructor.com
7 set 2010 14:26:59

Spiacente, c'era un errore nel codice. L'ho modificato. Noterai il parametro $post_type che ti permette di specificare un tipo di post particolare.

sorich87 sorich87
7 set 2010 15:59:46

@sorich87 il tuo codice funziona, ma ora se un utente cambia le opzioni dello schermo per mostrare un valore diverso, la pagina mostra solo il valore inserito tramite il file functions. Quello che cercavo era un modo per impostare le opzioni predefinite, ma se l'utente cambia manualmente le opzioni dello schermo, dovrebbe mostrare l'opzione impostata dall'utente.

NetConstructor.com NetConstructor.com
9 set 2010 01:49:05

@sorich87 inoltre... come potrei impostare le opzioni solo per un tipo di post specifico senza influenzare gli altri?

NetConstructor.com NetConstructor.com
9 set 2010 01:49:30

@sorich87 potresti fornire un esempio di impostazione dei valori solo per due tipi di post personalizzati? Forse sto facendo qualcosa di sbagliato

NetConstructor.com NetConstructor.com
10 set 2010 09:48:21

Ho aggiunto nuovi esempi.

sorich87 sorich87
12 set 2010 15:24:12

un altro esempio per favore. Supponiamo che tu abbia 5 tipi di post personalizzati. Ora, ipotizziamo che per post_type1 vuoi impostare il valore a 5 post, post_type2 impostato a un valore di 2 post e vuoi che tutti gli altri abbiano un valore predefinito di 10. Potresti mostrare come sarebbe questo codice? Inoltre, c'è un'opzione che si può impostare in modo che questi siano solo valori predefiniti a meno che l'utente non imposti manualmente il valore. Se sì, come potremmo forzare un valore in modo che l'utente non possa cambiarlo? Infine, quando selezioni "opzioni schermo" quel valore non si aggiorna/riflette il valore che viene effettivamente visualizzato.

NetConstructor.com NetConstructor.com
12 set 2010 19:38:14

Per chiunque stia cercando semplicemente di riordinare le meta box, questa risposta non è più l'approccio migliore. Vedi la risposta di Nabil.

rinogo rinogo
11 ago 2017 00:11:43
Mostra i restanti 8 commenti
1
12

Nel seguente esempio, sostituisci {CPT} con il nome del tipo di post, come post, page, book, event, imaginary, foobar... Quindi, se hai un tipo di post chiamato event, dovrai aggiungere un filtro per get_user_option_meta-box-order_event.

add_filter( 'get_user_option_meta-box-order_{CPT}', 'metabox_order' );
function metabox_order( $order ) {
    return array(
        'normal' => join( 
            ",", 
            array(       // vvv  Organizza qui come preferisci
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

Note:

  • Oltre a normal, puoi anche avere side e advanced
  • I valori sono ID di div separati da virgola, puoi ottenerli visualizzando il codice sorgente della pagina o puoi indovinarli
  • Qualsiasi metabox esistente che non è incluso nell'ordine personalizzato verrà aggiunto automaticamente alla fine della tua lista.
29 ago 2014 11:32:14
Commenti

Ero un po' confuso dalla nomenclatura {CPT}; per chiarire, se hai un post type chiamato event, dovresti aggiungere un filtro per get_user_option_meta-box-order_event.

rinogo rinogo
11 ago 2017 00:13:32
1

Esiste un plugin che combina questi frammenti di codice insieme in modo che un amministratore possa forzare le posizioni delle meta box per tutti gli utenti senza dover programmare?

Buona pratica o meno, quando si fornisce supporto tecnico a utenti meno esperti, aiuta molto sapere cosa stanno vedendo e dove si trova sullo schermo. Forzare le meta box nella stessa posizione per tutti gli utenti può essere vantaggioso con determinati utenti.

Idealmente, gli utenti con il ruolo di amministratore potrebbero ancora riposizionare le proprie meta box, ma gli abbonati e i collaboratori potrebbero beneficiare dal vedere tutte le meta box nelle stesse posizioni.

Esiste un plugin del genere? Non sembra che io riesca a trovarne uno.

Questo plugin potrebbe essere un'opzione poiché impedisce semplicemente agli utenti di spostare le meta box, ma non è stato aggiornato da un decennio. https://wordpress.org/plugins/unsortable-meta-box/

22 dic 2023 21:00:17
Commenti

Se hai una nuova domanda, per favore chiedila cliccando il pulsante Fai una domanda. Includi un link a questa domanda se può aiutare a fornire contesto. - Da Revisione

vancoder vancoder
22 dic 2023 22:28:03