Se ti occupi di realizzazione di siti Web con WordPress, ti sarà spesso capitato di avere a che fare con piccoli siti che richiedono un un’unica tipologia di post type.

In questi casi, avvalersi del post type di default chiamato “post” potrebbe essere la soluzione migliore, tuttavia se non vogliamo mantenere la dicitura “Articoli” e vogliamo alterare la struttura dei permalink, dovremo prendere alcuni accorgimenti.

Cambiamo il nome alle voci di menù

Ipotizziamo per esempio di voler trasformare il post type “post” in un più “aziendalese” post-type chiamato servizi. Per prima cosa andiamo ad inserire la seguente funzione (stesso discorso vale per tutte le 3 funzioni che vedremo) all’interno del file functions.php. In alternativa potremo creare un plugin affinchè funzioni indipendentemente dal tema usato.

Con questa funzione andiamo ad alterare quindi le scritte dei menù laddove cui compare la voce “Articoli”:

function my_change_post_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Servizi';
    $submenu['edit.php'][5][0] = 'Servizi';
    $submenu['edit.php'][10][0] = 'Aggiungi Servizio';
    $submenu['edit.php'][16][0] =  Tags Servizi';
    echo '';
}
add_action( 'admin_menu', 'my_change_post_label' );

Modifichiamo le labels

In seguito andiamo a riscrivere tutte le fascette dei menù che si trovano nel pannello di Amministrazione

function my_change_post_object() {
    global $wp_post_types;
    $labels = &$wp_post_types['post']->labels;
    $labels->name = 'Servizi';
    $labels->singular_name = 'Servizio';
    $labels->add_new = 'Aggiungi Servizio';
    $labels->add_new_item = 'Aggiungi Nuovo Servizio';
    $labels->edit_item = 'Modifica Servizio';
    $labels->new_item = 'Nuovo Servizio';
    $labels->view_item = 'Vedi Servizio';
    $labels->search_items = 'Cerca Servizi';
    $labels->not_found = 'Nessun Servizio trovato';
    $labels->not_found_in_trash = 'Nessun Servizio trovato nel cestino';
    $labels->all_items = 'Tutti i servizi';
    $labels->menu_name = 'Servizi';
    $labels->name_admin_bar = 'Nuovo Servizio';
}
add_action( 'init', 'my_change_post_object' );

Alteriamo il comportamento di default

Andiamo infine a modificare (solo quello che ci interessa) le funzionalità standard. Per esempio potremmo decidere di rimuovere il supporto ai commenti (cancelliamo quindi da supports ‘comments’), oppure di aggiungere uno slug nei permalink prima del postname (per avere ad esempio /servizi/il-mio-servizio).

function my_new_default_post_type() {

    register_post_type( 'post', array(
        'labels' => array(
            'name_admin_bar' =>; _x( 'Servizi', 'aggiungi nuovo nella barra di admin' ),
        ),
        'public'  => true,
        '_builtin' => false, 
        '_edit_link' =>; 'post.php?post=%d', 
        'capability_type' =>; 'post',
        'map_meta_cap' =>; true,
        'hierarchical' =>; false,
        'has_archive'  =>; true,
        'rewrite' =>; array( 'slug' =>; 'servizi' ),
        'query_var' =>; false,
        'supports' =>; array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions' ),
    ) );
}

add_action( 'init', 'my_new_default_post_type', 1 );

Et voilà, con tre funzioni abbiamo fatto “sparire” i post di WordPress ma possiamo beneficiare di tutte le loro funzionalità (i feed ad esempio)! Semplice no?