Définir les options de l'écran d'administration par défaut et l'ordre des métabox

28

Je cherche désespérément un moyen (n'importe quel moyen) de définir les "options d'écran" par défaut et l'ordre des métaboxes via le fichier functions.php. Quelqu'un at-il de l'aide à fournir ici?

NetConstructor.com
la source
Mise à jour 2014: pour ceux qui ont juste besoin de réorganiser les méta-boîtes, voir la réponse de Nabil ci-dessous .
rinogo

Réponses:

23

Définition de l'ordre des métadonnées sur les pages de post-édition

Vous devrez supprimer les métadonnées et les ajouter à nouveau dans l'ordre souhaité.

Pour désactiver les métadonnées: (personnalisez selon vos besoins, regardez l'ID de la metabox dans le code html pour savoir quel nom vous devez utiliser comme premier paramètre des fonctions)

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

Après les avoir supprimés, vous pouvez utiliser la fonction add_meta_box pour les ajouter à de nouvelles positions: http://codex.wordpress.org/Function_Reference/add_meta_box . L'ordre des métadonnées dépend de l'ordre dans lequel vous appelez la fonction add_meta_box. Par exemple: avec l'extrait de code suivant, la zone de méta commentaires sera avant la zone de méta des champs personnalisés.

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

Vous voudrez peut-être regarder le fichier wp-admin / edit-form-advanced.php

Définition du titre des colonnes à afficher sur la page de la liste des articles

Vous devez utiliser le filtre de gestion _ {$ post_type} _posts_columns. Par exemple: l'extrait suivant supprimera la colonne des commentaires.

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

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Définition des résultats par défaut à afficher sur la page de la liste des publications

Utilisez les filtres "edit _ {$ post_type} _per_page" et "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' );

Pour cibler un type de publication spécifique:

  • utiliser add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );par exemple add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );pour les publications, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );pour les pages.

  • ou utilisez une condition dans votre fonction. par exemple:

    fonction 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;
sorich87
la source
Désolé, je ne me suis peut-être pas expliqué correctement. Je faisais référence aux métadonnées sur la page de modification des articles dans la zone d'administration ainsi qu'à la définition du nombre de messages par défaut à afficher sur la page de la liste des articles d'administration.
NetConstructor.com
1
donc techniquement ce n'est pas une question, c'est vraiment 2 questions?
Tom J Nowell
J'ai modifié ma réponse. Faites-moi savoir si vous avez besoin de plus de détails.
sorich87
@ sorich87 merci pour votre réponse mais d'après ce que je me souviens, il n'y avait aucun moyen de spécifier l'ordre exact de chaque métabox ou était-ce? Je devrais peut-être être un peu plus précis. Je recherche essentiellement différents extraits de code qui me permettent de prédéfinir diverses options pour tous les utilisateurs sans avoir à me connecter à chaque compte. Exemples: définir l'ordre exact des métadonnées sur les pages de publication, définir le titre des colonnes à afficher sur la page de la liste des publications, définir les résultats par défaut à afficher sur la page de la liste des publications ... des choses comme ça. Merci d'avance.
NetConstructor.com
J'ai modifié ma réponse.
sorich87
9

Dans l'exemple suivant, remplacez {CPT}le nom du type de poste, comme post, page, book, event, imaginary, foobar... Donc , si vous avez un type de poste nommé event, vous devez ajouter un filtre pour 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',
            )
        ),
    );
}

Remarques:

  • Avec normal, vous pouvez également avoir sideetadvanced
  • Les valeurs sont des identifiants div séparés par des virgules, vous pouvez les saisir en affichant le code source de la page ou vous pouvez deviner
  • Tout métabox existant qui n'est pas inclus dans votre commande personnalisée sera ajouté automatiquement à la fin de votre liste.
Nabil Kadimi
la source
1
J'étais quelque peu confus par la {CPT}nomenclature; pour clarifier, si vous avez un type de poste nommé event, vous devrez ajouter un filtre pour get_user_option_meta-box-order_event.
rinogo