Definir opções da tela do administrador padrão e ordem da caixa de metabox


28

Estou desesperadamente procurando alguma maneira (de qualquer maneira) de definir as "opções de tela" padrão e a ordem metabox através do arquivo functions.php. alguém tem alguma ajuda que possa fornecer aqui?


Atualização de 2014: para quem só precisa reordenar as meta boxes, consulte a resposta de Nabil abaixo .
Rinogo

Respostas:


23

Definindo a ordem das meta boxes nas páginas de pós-edição

Você precisará remover as caixas de meta e adicioná-las novamente na ordem que desejar.

Para desativar as meta boxes: (personalize de acordo com suas necessidades, consulte o código da metabox no código html para saber qual nome você deve usar como primeiro parâmetro das funções)

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

Após removê-los, você pode usar a função add_meta_box para adicioná-los em novas posições: http://codex.wordpress.org/Function_Reference/add_meta_box . A ordem das meta boxes depende da ordem em que você chama a função add_meta_box. Por exemplo: com o seguinte snippet de código, a meta-caixa de comentários estará antes da meta-caixa de campos personalizados.

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

Você pode consultar o arquivo wp-admin / edit-form-advanced.php

Definir qual título das colunas aparece na página da lista de postagens

Você precisa usar o filtro gerenciar _ {$ post_type} _posts_columns. Por exemplo: o seguinte trecho removerá a coluna de comentários.

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

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Definindo os resultados padrão a serem mostrados na página da lista de postagens

Use os filtros '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' );

Para segmentar um tipo de postagem específico:

  • use, add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' );por exemplo, add_filter( 'edit_post_per_page', 'my_edit_post_per_page' );para postagens, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' );para páginas.

  • ou use uma condição dentro de sua função. por exemplo:

    função 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;

Desculpe, talvez eu não tenha me explicado corretamente. Eu estava me referindo às caixas de meta na página de edição de postagens na área de administração, além de definir o número padrão de postagens a serem exibidas na página da lista de postagens de administrador.
NetConstructor.com

1
então tecnicamente isso não é uma pergunta, são realmente 2 perguntas?
Tom J Nowell

Eu modifiquei minha resposta. Deixe-me saber se você precisar de mais detalhes.
sorich87

@ sorich87 obrigado pela sua resposta, no entanto, pelo que me lembro, não havia como especificar a ordem exata de cada metabox ou havia? Talvez eu deva ser um pouco mais específico. Basicamente, estou procurando vários trechos de código que permitem predefinir várias opções para todos os usuários sem precisar fazer login em cada conta. Exemplos: definindo a ordem exata das meta boxes nas páginas de pós-edição, definindo o título de colunas que aparece na página da lista de postagens, definindo os resultados padrão a serem mostrados na página da lista de postagens ... coisas assim. Desde já, obrigado.
NetConstructor.com

Eu modifiquei minha resposta.
sorich87

9

No exemplo a seguir, substitua {CPT}com o nome do tipo de post, como post, page, book, event, imaginary, foobar... Então se você tem um tipo de pós chamado event, você precisa adicionar um filtro para 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',
            )
        ),
    );
}

Notas:

  • Junto com normal, você também pode ter sideeadvanced
  • Os valores são IDs div separados por vírgula, você pode ver o código-fonte da página ou pode adivinhar
  • Qualquer metabox existente não está incluída no seu pedido personalizado será adicionada automaticamente no final da sua lista.

1
Fiquei um pouco confuso com a {CPT}nomenclatura; para esclarecer, se você tiver um tipo de postagem nomeado event, precisará adicionar um filtro para get_user_option_meta-box-order_event.
Rinogo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.