5 WordPress tips che utilizzo spesso durante lo sviluppo

5 WordPress tips che utilizzo spesso durante lo sviluppo

896
0
CONDIVIDI

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 . '<li' . $id . $value . $class_names .'>';
 
	$flexdata = '';
	$custom_fields = get_post_custom( $item->object_id );
	if ( key_exists( "flexdropdown", $custom_fields ) ) {
	   $flexdata = ' data-flexmenu="'. get_post_meta( $item->object_id, 'flexdropdown', true) . '"';
	}
 
	$attributes  = ! empty( $item->attr_title ) ? ' title="'         . esc_attr( $item->attr_title ) .'"' : '';
	$attributes .= ! empty( $item->target     ) ? ' target="'        . esc_attr( $item->target     ) .'"' : '';
	$attributes .= ! empty( $item->xfn        ) ? ' rel="'           . esc_attr( $item->xfn        ) .'"' : '';
	$attributes .= $flexdata;
	$attributes .= ! empty( $item->url        ) ? ' href="'          . esc_attr( $item->url        ) .'"' : '';
 
	$item_output = $args->before;
	$item_output .= '<a'. $attributes . ' tabindex="'. $tabindex .'">';
	$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
	$item_output .= '</a>';
	$item_output .= $args->after;
 
	$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
	}
}

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 '<div class="pagination primary-links">' . paginate_links( $pagination ) . '</div>';

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 '<div class="pagination primary-links">' . paginate_links( $pagination ) . '</div>';

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