Oggi condivido 5 WORDPRESS tips che potrebbero tornarvi utili in fase di sviluppo. Dalla paginazione a trucchi per la web accessibility, dall’invio corretto di mail alla modifica dei teti di riassunto, cerca l’hook che fa per te.
Modificare label del menu articoli nella sezione admin
Utilizzo 2 hook da inserire nel file function.php. Supponiamo di voler cambiare la voce di menu “Articoli” in “Eventi”, dovrò realizzare questo codice:
function change_post_menu_label() {
global $menu;
global $submenu;
$menu[5][0] = 'Eventi';
$submenu['edit.php'][5][0] = 'Eventi';
$submenu['edit.php'][10][0] = 'Nuovo evento';
$submenu['edit.php'][15][0] = 'Status';
$submenu['edit.php'][16][0] = 'Labels';
echo '';
}
function change_post_object_label() {
global $wp_post_types;
$labels = &$wp_post_types['post']->labels;
$labels->name = 'Eventi';
$labels->singular_name = 'Evento';
$labels->add_new = 'Nuovo evento';
$labels->add_new_item = 'Nuovo evento';
$labels->edit_item = 'Modifica eventi';
$labels->new_item = 'Evento';
$labels->view_item = 'Visualizza evento';
$labels->search_items = 'Cerca evento';
$labels->not_found = 'Nessun evento trovato';
$labels->not_found_in_trash = 'Nessun evento trovato nel cestino';
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );
Tabindex nel menu
Aggiungere automaticamente un tabindex con wordpress non è possibile, chi sviluppa un sito accessibile deve avvalersi di una funzione custom che sfrutta i “walker” di WP. Anche questo codice può essere inserito all’interno del file functions.php presente nel tema corrente.
function start_el(&$output, $item, $depth, $args, $i = 49) {
//var_dump($item);
global $wp_query;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$tabindex = $item->menu_order + $i;
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'menu-item-' . $item->ID;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
$class_names = ' class="' . esc_attr( $class_names ) . '"';
$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
$id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
$output .= $indent . '
Mentre all’interno del tema, basta modificare la funzione wp_nav_menu() generalmente presente nell’header:
wp_nav_menu(array('menu' => 'nome_menu', 'walker' => new Flexdropdown_Menu()));
Creare una paginazione di contenuti
Utile soprattutto per chi sviluppa plugin o temi custom, WordPress mette a disposizioni funzioni native per poter effettuare una paginazione personalizzata.
Esempio di paginazione wordpress utilizzando l’oggetto WP_Query:
$list = new WP_Query( $query_args );
$pagination = array(
'base' => str_replace( 99999, '%#%', get_pagenum_link( 99999 ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var( 'paged' ) ),
'total' => $list->max_num_pages,
'next_text' => 'avanti',
'prev_text' => 'indietro'
);
echo '' . paginate_links( $pagination ) . '';
Esempio di paginazione standard:
$list = range(1, 100);
$items_per_page = 12;
$pagination = array(
'base' => get_bloginfo( 'url' ) . '/pagina/%_%',
'format' => '?paged=%#%',
'current' => $_GET['current_page'],
'total' => ceil( max($list) / $items_per_page ),
'next_text' => 'go forth',
'prev_text' => 'go back'
);
echo '' . paginate_links( $pagination ) . '';
Upload di file con WordPress
Codice per caricare file utilizzando wp_upload_bits:
$upload = wp_upload_bits( $_FILES['myfile']['name'], null, file_get_contents( $_FILES['myfile']['tmp_name'] ) );
echo 'Upload completato nel seguente percorso: ' . $upload['file'] . ', la url del file è la seguente: ' . $upload['url'];
Modificare lunghezza riassunto
new_excerpt_more/new_excerpt_length, sono filtri molto utilizzati per ridurre o allungare la lunghezza dei riassunti. Il primo serve a definire un carattere finale per il riassunto (es. […] o continua a leggere), mentre il secondo definisce la lunghezza dello stesso.
function new_excerpt_length($length) {
return 100;
}
add_filter('excerpt_length', 'new_excerpt_length');
function new_excerpt_more($more) {
return '…';
}
add_filter('excerpt_more', 'new_excerpt_more');