Imposta le opzioni della schermata di amministrazione predefinita e l'ordine Metabox


28

Sto cercando disperatamente un modo (in qualche modo) di impostare le "opzioni schermo" predefinite e l'ordine metabox attraverso il file Functions.php. qualcuno ha qualche aiuto che può fornire qui?


Aggiornamento 2014: per coloro che hanno solo bisogno di riordinare i meta-box, vedi la risposta di Nabil di seguito .
Rinogo,

Risposte:


23

Impostazione dell'ordine delle meta-box nelle pagine post modifica

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

Per disabilitare le meta box: (personalizza in base alle tue esigenze, guarda l'id metabox nel codice html per sapere quale nome dovresti 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 averli rimossi, è possibile utilizzare la funzione add_meta_box per aggiungerli in nuove posizioni: http://codex.wordpress.org/Function_Reference/add_meta_box . L'ordine delle meta box dipende dall'ordine in cui si chiama la funzione add_meta_box. Ad esempio: con il seguente frammento di codice, la meta-casella dei commenti sarà prima della meta-casella 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', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

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

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

Potresti voler guardare il file wp-admin / edit-form-advanced.php

Impostazione del titolo delle colonne visualizzato nella pagina dell'elenco dei post

Devi utilizzare il filtro per gestire _ {$ post_type} _posts_columns. Ad esempio: il frammento seguente 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' );

Impostazione dei risultati predefiniti da mostrare nella pagina dell'elenco dei post

Utilizza 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 scegliere come target un tipo di post specifico:

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

  • o usa una condizione all'interno della tua funzione. per esempio:

    funzione 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;

Scusa, forse non mi sono spiegato correttamente. Mi riferivo alle meta-box nella pagina di modifica dei post nell'area di amministrazione, nonché all'impostazione del numero predefinito di post da visualizzare nella pagina dell'elenco dei post di amministrazione.
NetConstructor.com il

1
quindi tecnicamente questa non è una domanda, sono davvero 2 domande?
Tom J Nowell

Ho modificato la mia risposta. Fammi sapere se hai bisogno di più dettagli.
sorich87

@ sorich87 grazie per la tua risposta, tuttavia da ciò che ricordo non c'era modo di specificare esattamente l'ordine di ogni metabox o c'era? Forse dovrei essere un po 'più specifico. Sto fondamentalmente cercando vari frammenti di codice che mi consentano di preimpostare varie opzioni per tutti gli utenti senza dover accedere a ciascun account. Esempi: impostazione dell'ordine esatto di meta-box nelle pagine di modifica dei post, impostazione del titolo delle colonne da mostrare nella pagina dell'elenco dei post, impostazione dei risultati predefiniti da mostrare nella pagina dell'elenco dei post ... cose del genere. Grazie in anticipo.
NetConstructor.com

Ho modificato la mia risposta.
sorich87

9

Nel seguente esempio, sostituire {CPT}con il nome del tipo postale, come post, page, book, event, imaginary, foobar... Quindi, se si dispone di un tipo di messaggio di nome event, si avrebbe bisogno di 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  Arrange here as you desire
                'customdiv-{CPT}',
                'authordiv',
                'slugdiv',
            )
        ),
    );
}

Gli appunti:

  • Insieme a normal, puoi anche avere sideeadvanced
  • I valori sono ID div separati da virgola, puoi afferrare visualizzando il codice sorgente della pagina o puoi indovinare
  • Qualsiasi metabox esistente non è incluso nel tuo ordine personalizzato verrà aggiunto automaticamente alla fine dell'elenco.

1
Ero un po 'confuso dalla {CPT}nomenclatura; per chiarire, se si dispone di un tipo di post denominato event, è necessario aggiungere un filtro per get_user_option_meta-box-order_event.
Rinogo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.