Adicionando um campo de ordenação no custom post type admin ( WordPress )

Se você tem um custom post type e precisa ordená-los pela edição rápida ou dentro do próprio post, leia esse pequeno artigo que te mostrarei como.

Suponhamos que você tem um custom post type chamado “cursos”

1.Adicione um campo atributo “ordem” no post type cursos

add_action('admin_init', 'add_attributes_order_cursos');
function add_attributes_order_cursos(){
    add_post_type_support( 'cursos', 'page-attributes' );
}

Adicione a função acima no seu functions.php
ao chamar o hook “admin_init”, quando carrega o admin a função irá criar um atributo nos posts types.

2. Adicione o atributo ordem criado na coluna de listagem

add_action('manage_edit-cursos_columns', 'add_new_column_order_courses');
function add_new_column_order_courses($post_columns) {
    $post_columns['menu_order'] = "Ordem";
    return $post_columns;
}

Adicione a funcção acima no seu functions.php
O codigo cima adiciona a coluna “Ordem” na lista de posts do custom post type
ao chamar o hook “add_action(‘manage_edit-cursos_columns’)” iremos adicionar a coluna “ordem” no post type cursos “manage_edit-SEU-POST-TYPE_columns”

3. Mostra os valores de ordem na coluna “ordem” criada

add_action('manage_cursos_posts_custom_column','show_order_column_courses');
function show_order_column_courses($name){
    global $post;
    switch ($name) {
        case 'menu_order':
            $order = $post->menu_order;
            echo $order;
        break;
        default:
        break;
    }
}

4. Tornar a coluna classificável

function order_column_register_sortable_courses($columns){
    $columns['menu_order'] = 'menu_order';
    return $columns;
}
add_filter('manage_edit-cursos_sortable_columns','order_column_register_sortable_courses');

5. Por fim, classificar as postagens pelo menu_order ( ordenação )

add_action( 'pre_get_posts', 'courses_posts_sort_order'); 
function courses_posts_sort_order($query){
	if(is_admin() && is_archive() && $query->get('post_type') === 'cursos'):
	   $query->set( 'order', 'ASC' );
	   $query->set( 'orderby', 'menu_order' );
	endif;
};

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *