Legen Sie die Standardoptionen für den Admin-Bildschirm und die Metabox-Reihenfolge fest

28

Ich bin verzweifelt auf der Suche nach einer Möglichkeit, die Standardeinstellungen für "Bildschirmoptionen" und die Metabox-Reihenfolge in der Datei functions.php festzulegen. Hat jemand Hilfe, die er hier anbieten kann?

NetConstructor.com
quelle
Update 2014: Für diejenigen, die nur Meta-Boxen neu anordnen müssen, siehe die Antwort von Nabil unten .
Rinogo

Antworten:

23

Festlegen der Reihenfolge von Meta-Boxen auf Nachbearbeitungsseiten

Sie müssen die Meta-Boxen entfernen und sie in der gewünschten Reihenfolge erneut hinzufügen.

So deaktivieren Sie Meta-Boxen: (Passen Sie sie an Ihre Bedürfnisse an. Sehen Sie sich die Metabox-ID im HTML-Code an, um zu erfahren, welchen Namen Sie als ersten Parameter der Funktionen verwenden sollten.)

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

Nachdem Sie sie entfernt haben, können Sie sie mit der Funktion add_meta_box an neuen Positionen hinzufügen: http://codex.wordpress.org/Function_Reference/add_meta_box . Die Reihenfolge der Meta-Boxen hängt von der Reihenfolge ab, in der Sie die Funktion add_meta_box aufrufen. Beispiel: Mit dem folgenden Code-Snippet befindet sich das Meta-Feld für Kommentare vor dem Meta-Feld für benutzerdefinierte Felder.

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

Vielleicht möchten Sie sich die Datei wp-admin / edit-form-advanced.php ansehen

Festlegen, welcher Spaltentitel auf der Beitragslistenseite angezeigt wird

Sie müssen den Filter verwenden, um _ {$ post_type} _posts_columns zu verwalten. Beispiel: Das folgende Snippet entfernt die Kommentarspalte.

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

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Festlegen der Standardergebnisse, die auf der Beitragslistenseite angezeigt werden

Verwenden Sie die Filter "_ {$ post_type} _per_page bearbeiten" und "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' );

So zielen Sie auf einen bestimmten Beitragstyp ab:

  • Verwenden Sie add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );zB add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );für Beiträge, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );für Seiten.

  • oder verwenden Sie eine Bedingung innerhalb Ihrer Funktion. z.B:

    Funktion 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
quelle
Entschuldigung, vielleicht habe ich mich nicht richtig erklärt. Ich bezog mich auf die Meta-Felder auf der Post-Bearbeitungsseite im Admin-Bereich und stellte die Standardanzahl der Posts ein, die auf der Seite mit der Admin-Post-Liste angezeigt werden sollen.
NetConstructor.com
1
also technisch ist dies keine frage, es sind wirklich 2 fragen?
Tom J Nowell
Ich habe meine Antwort geändert. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Sorich87
@ sorich87 danke für deine antwort aber soweit ich mich erinnere gab es keine möglichkeit die genaue reihenfolge jeder metabox zu spezifizieren oder war da? Vielleicht sollte ich etwas genauer sein. Grundsätzlich suche ich nach verschiedenen Codeausschnitten, mit denen ich verschiedene Optionen für alle Benutzer voreinstellen kann, ohne mich bei jedem Konto anmelden zu müssen. Beispiele: Festlegen der exakten Reihenfolge von Meta-Feldern auf Nachbearbeitungsseiten, Festlegen, welcher Spaltentitel auf der Nachbearbeitungslistenseite angezeigt wird, Festlegen der Standardergebnisse, die auf der Nachbearbeitungslistenseite angezeigt werden. Danke im Voraus.
NetConstructor.com
Ich habe meine Antwort geändert.
Sorich87
9

Im folgende Beispiel, ersetzen Sie {CPT}mit dem Posttypnamen, wie post, page, book, event, imaginary, foobar... Also , wenn Sie einen Beitrag Typen mit dem Namen haben event, müssen Sie einen Filter für hinzuzufügen 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',
            )
        ),
    );
}

Anmerkungen:

  • Zusammen mit normalkönnen Sie auch sideund habenadvanced
  • Die Werte sind durch Kommas getrennte Div-IDs. Sie können den Quellcode der Seite anzeigen oder erraten
  • Etwaige vorhandene Metaboxen, die nicht in Ihrer benutzerdefinierten Bestellung enthalten sind, werden automatisch am Ende Ihrer Liste hinzugefügt.
Nabil Kadimi
quelle
1
Ich war etwas verwirrt von der {CPT}Nomenklatur; Wenn Sie einen Beitragstyp mit dem Namen haben event, müssen Sie zur Verdeutlichung einen Filter für hinzufügen get_user_option_meta-box-order_event.
Rinogo