Conteggio caratteri estratto articoli
-
Buon giorno a tutti,
premesso che non so molto di PHP vi espongo il mio problema:
sto finendo di modificare un blog in WordPress per mia moglie, l’ ultima cosa che mi manca di fare è creare un estratto degli articoli con lo stesso numero di caratteri, non di parole perchè l’ anteprima non viene precisa, quindi pensavo al conteggio delle lettere cosi da permettere una visualizzazione omogenea (tutti gli estratti delle stesse dimensioni), ho provato mille funzioni da mettere nel file function.php ma tutte quelle che ho provato, anche quelle che dicevano di contare i caratteri contano le parole, al momento uso questa funzione:
function wpse_allowedtags() { // Add custom tags to this string return '<script>,<style>,<br>,<pre>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; } if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) : function wpse_custom_wp_trim_excerpt($wpse_excerpt) { global $post; $raw_excerpt = $wpse_excerpt; if ( '' == $wpse_excerpt ) { $wpse_excerpt = get_the_content(''); $wpse_excerpt = strip_shortcodes( $wpse_excerpt ); $wpse_excerpt = apply_filters('the_content', $wpse_excerpt); $wpse_excerpt = str_replace(']]>', ']]>', $wpse_excerpt); $wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */ //Set the excerpt word count and only break after sentence is complete. $excerpt_word_count = 15; $excerpt_length = apply_filters('excerpt_length', $excerpt_word_count); $tokens = array(); $excerptOutput = ''; $count = 0; // Divide the string into tokens; HTML tags, or words, followed by any whitespace preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens); foreach ($tokens[0] as $token) { if ($count >= $excerpt_word_count && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) { // Limit reached, continue until , ; ? . or ! occur at the end $excerptOutput .= trim($token); break; } // Add words to complete sentence $count++; // Append what's left of the token $excerptOutput .= $token; } $wpse_excerpt = trim(force_balance_tags($excerptOutput)); $excerpt_end = '... <br/><br/> <a style="font-family: Merriweather, Georgia, serif; font-size: 0.75rem; text-transform: uppercase;" href="'. esc_url( get_permalink() ) . '">' . '' . sprintf(__( 'Read more: %s ', 'wpse' ), get_the_title()) . '</a>'; $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); $pos = strrpos($wpse_excerpt, '</'); if ($pos !== false) // Inside last HTML tag $wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */ //else // After the content //$wpse_excerpt .= $excerpt_end; /*Add read more in new paragraph */ return $wpse_excerpt; } return apply_filters('wpse_custom_wp_trim_excerpt', $wpse_excerpt, $raw_excerpt); } endif; remove_filter('get_the_excerpt', 'wp_trim_excerpt'); add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
che oltre a contare le parole mantiene la formattazione e mantiene parole intere.
C’è una possibilità di fare quello che cerco mantenendo la funzione? O comunque una funzione che fa tutto quello che cerco ?
Grazie a tutti in anticipo
P.s. Dimenticavo Uso WordPress 4.6, il tema modificato è twenty sixteen, non vorrei usare Plugin.
il sito dove faccio tutte le modifiche è http://etherealprove.altervista.org/
- Il topic ‘Conteggio caratteri estratto articoli’ è chiuso a nuove risposte.