Ustaw domyślne opcje ekranu administratora i kolejność Metabox

28

Desperacko szukam jakiegoś sposobu (w jakikolwiek sposób), aby ustawić domyślne „opcje ekranu” i kolejność metaboxów w pliku functions.php. czy ktoś ma tutaj jakąś pomoc?

NetConstructor.com
źródło
Aktualizacja 2014: Dla tych, którzy muszą zmienić kolejność meta-skrzynek, zobacz odpowiedź Nabila poniżej .
rinogo,

Odpowiedzi:

23

Ustawianie kolejności metadanych na stronach edycji postów

Musisz usunąć meta pola i dodać je ponownie w żądanej kolejności.

Aby wyłączyć pola meta: (dostosuj do swoich potrzeb, spójrz na identyfikator metabox w kodzie HTML, aby dowiedzieć się, której nazwy należy użyć jako pierwszego parametru funkcji)

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

Po ich usunięciu możesz użyć funkcji add_meta_box, aby dodać je w nowych pozycjach: http://codex.wordpress.org/Function_Reference/add_meta_box . Kolejność pól meta zależy od kolejności, w której wywoływana jest funkcja add_meta_box. Np .: w przypadku następującego fragmentu kodu meta-pole komentarzy będzie znajdować się przed meta-polem niestandardowych pól.

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

Możesz zajrzeć do pliku wp-admin / edit-form-advanced.php

Określanie, które kolumny będą wyświetlane na stronie listy postów

Musisz użyć filtru zarządzaj _ {$ post_type} _posts_columns. Np .: poniższy fragment usunie kolumnę komentarzy.

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

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Ustawianie domyślnych wyników wyświetlanych na stronie listy postów

Użyj filtrów „edit _ {$ post_type} _per_page” i „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' );

Aby kierować na określony typ postu:

  • użyj add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );np. add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );do postów, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );do stron.

  • lub użyj warunku w ramach swojej funkcji. na przykład:

    funkcja 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
źródło
Przepraszam, może nie wyjaśniłem się poprawnie. Miałem na myśli meta pola na stronie edycji postów w obszarze administracyjnym, a także ustawiłem domyślną liczbę postów wyświetlanych na stronie listy postów administratora.
NetConstructor.com
1
więc technicznie to nie jest pytanie, to naprawdę 2 pytania?
Tom J Nowell
Zmodyfikowałem swoją odpowiedź. Daj mi znać, jeśli potrzebujesz więcej szczegółów.
sorich87
@ sorich87 dziękuję za odpowiedź, jednak z tego, co pamiętam, nie było sposobu, aby sprecyzować dokładną kolejność każdego metaboksu, czy też był? Może powinienem być bardziej konkretny. Zasadniczo szukam różnych fragmentów kodu, które pozwalają mi wstępnie ustawić różne opcje dla wszystkich użytkowników bez konieczności logowania się na każdym koncie. Przykłady: ustawianie dokładnej kolejności metaboksów na stronach edycji postów, ustawianie tytułu kolumn wyświetlanych na stronie listy postów, ustawianie domyślnych wyników wyświetlanych na stronie listy postów ... takie rzeczy. Z góry dziękuję.
NetConstructor.com,
Zmodyfikowałem swoją odpowiedź.
sorich87
9

W poniższym przykładzie, należy wymienić {CPT}z nazwy typu poczta, jak post, page, book, event, imaginary, foobar... Więc jeśli masz typ pocztowy nazwie event, to musiałby dodać filtr do 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',
            )
        ),
    );
}

Uwagi:

  • Wraz z normaltym możesz także mieć sideiadvanced
  • Wartościami są oddzielone przecinkami identyfikatory div, które można pobrać, wyświetlając kod źródłowy strony lub zgadując
  • Każdy metaboks, który istnieje, nie jest uwzględniony w niestandardowym zamówieniu, zostanie dodany automatycznie na końcu listy.
Nabil Kadimi
źródło
1
{CPT}Nomenklatura nieco mnie zdezorientowała ; dla wyjaśnienia, jeśli masz nazwany typ postu event, musisz dodać filtr dla get_user_option_meta-box-order_event.
rinogo,