Mostra solo l'inizio del post

28 mar 2017, 17:34:09
Visualizzazioni: 272
Voti: 0

So che normalmente questa è una domanda ovvia con molte risposte (come qui), ma vorrei mostrare solo l'inizio dei post con un pulsante "leggi tutto". Non uso gli excerpt, quindi vorrei che WordPress prendesse automaticamente le prime 55 parole o la prima frase per visualizzarle.

Uso il tema Toivo Lite. L'index.php è:

<?php
get_header(); ?>

<?php if ( have_posts() ) : ?>

    <?php do_action( 'toivo_before_loop' ); // Hook azione prima del loop. ?>

    <?php /* Inizia il Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

        <?php
            /* Includi il template specifico per il formato del post.
             * Se vuoi sovrascriverlo in un child theme, includi un file
             * chiamato content-___.php (dove ___ è il nome del Formato Post) e quello verrà usato invece.
             */
            get_template_part( 'content', ( post_type_supports( get_post_type(), 'post-formats' ) ? get_post_format() : get_post_type() ) );
        ?>

    <?php endwhile; ?>

    <?php
        the_posts_pagination( array(
            'prev_text'          => __( 'Pagina precedente', 'toivo-lite' ),
            'next_text'          => __( 'Pagina successiva', 'toivo-lite' ),
            'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Pagina', 'toivo-lite' ) . ' </span>',
        ) );
    ?>

<?php else : ?>

    <?php get_template_part( 'content', 'none' ); ?>

<?php endif; ?>

<?php do_action( 'toivo_after_loop' ); // Hook azione dopo il loop. ?>

<?php get_footer(); ?>

Ho provato a sostituire i due content con excerpt, ma poi la pagina risulta vuota (solo header e footer).

0
Tutte le risposte alla domanda 2
4

Prova a sostituire questo:

        <?php
            /* Includi il template specifico del Post-Format per il contenuto.
             * Se vuoi sovrascriverlo in un child theme, includi un file
             * chiamato content-___.php (dove ___ è il nome del Post Format) e quello verrà usato al suo posto.
             */
            get_template_part( 'content', ( post_type_supports( get_post_type(), 'post-formats' ) ? get_post_format() : get_post_type() ) );
        ?>

Con questo:

<?php echo my_excerpt(get_the_ID(), 300, 'Leggi tutto'); ?>

E poi aggiungi questo al tuo file functions.php:

function my_excerpt($postid, $len = 500, $more = false) {

    $excerpt = apply_filters('the_excerpt', get_post_field('post_excerpt', $postid));

    if(empty($excerpt)) $excerpt = strip_shortcodes(strip_tags(apply_filters('the_excerpt', get_post_field('post_content', $postid))));

    if(strlen($excerpt) > $len) $excerpt = substr($excerpt, 0, $len-3) . '&hellip;';

    if($more) $excerpt .= '<a class="read-more" href="' . get_the_permalink($postid) . '">' . $more . '</a>';

    return $excerpt;
}

Di default questa funzione restituirà i primi 300 caratteri del contenuto del post. Modifica il valore "300" nella chiamata a my_excerpt con il numero di caratteri che vuoi vengano restituiti (nota bene, questo non è il numero di parole da restituire, ma il numero di caratteri).

28 mar 2017 17:51:01
Commenti

Non funziona. Vengono visualizzati i primi 300 caratteri, ma non c'è alcuna formattazione né titoli... Tutto è in un unico blocco.

Shan-x Shan-x
28 mar 2017 18:35:05

Sì, questo codice rimuove tutto ciò. Se non vuoi che venga rimosso, cambia questa riga: if(empty($excerpt)) $excerpt = strip_shortcodes(strip_tags(apply_filters('the_excerpt', get_post_field('post_content', $postid)))); con questa invece: if(empty($excerpt)) $excerpt = apply_filters('the_excerpt', get_post_field('post_content', $postid));

Industrial Themes Industrial Themes
28 mar 2017 18:39:16

Così è meglio, ma mancano ancora i titoli e la formattazione (occupano tutta la larghezza invece di rimanere solo nella colonna).

Shan-x Shan-x
28 mar 2017 18:42:50

In quel caso, prova invece questa modifica per quella riga: if(empty($excerpt)) $excerpt = get_post_field('post_content', $postid); questo restituirà il contenuto così com'è ma potrebbe essere rischioso perché se all'inizio del post c'è del codice html verrà conteggiato nel conteggio dei caratteri, potenzialmente portando a contenuti di lunghezza diversa restituiti da un post all'altro.

Industrial Themes Industrial Themes
28 mar 2017 18:44:18
3

Puoi provare quanto segue:

    <?php
    get_header(); ?>

    <?php if ( have_posts() ) : ?>

        <?php do_action( 'toivo_before_loop' ); // Hook azione prima del loop. ?>

        <?php /* Inizia il Loop */ ?>
        <?php while ( have_posts() ) : the_post(); ?>

            <?php
            /* Includi il template specifico per il Post-Format.
            * Se vuoi sovrascriverlo in un child theme, includi un file
            * chiamato content-___.php (dove ___ è il nome del Post Format) e verrà usato quello.
            */
            echo wp_trim_words( get_the_content(), $num_words = 50, $more = '...' );
            echo '<a href="'.get_the_permalink().'">Leggi tutto</a>';
            ?>

        <?php endwhile; ?>

        <?php
        the_posts_pagination( array(
        'prev_text'          => __( 'Pagina precedente', 'toivo-lite' ),
        'next_text'          => __( 'Pagina successiva', 'toivo-lite' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Pagina', 'toivo-lite' ) . ' </span>',
        ) );
        ?>

    <?php else : ?>

        <?php get_template_part( 'content', 'none' ); ?>

    <?php endif; ?>

    <?php do_action( 'toivo_after_loop' ); // Hook azione dopo il loop. ?>

    <?php get_footer(); ?>

Ho sostituito:

    get_template_part( 'content', ( post_type_supports( get_post_type(), 'post-formats' ) ? get_post_format() : get_post_type() ) );

Con:

    wp_trim_words( the_content(), $num_words = 50, $more = '...' );

Qualcuno potrebbe dirmi che questo è l'approccio sbagliato, ma potrebbe esserti utile. Mostrerà le prime 50 parole del contenuto con un "..." alla fine.

28 mar 2017 19:40:53
Commenti

Dove dovrei metterlo?

Shan-x Shan-x
28 mar 2017 19:42:51

Per favore clicca il link modifica sotto la tua risposta per aggiungere più informazioni su dove puoi metterlo, insieme a qualsiasi formattazione del codice necessaria.

Howdy_McGee Howdy_McGee
28 mar 2017 20:14:04

Ho modificato il codice in modo che abbia più senso, spero sia d'aiuto.

Joe Joe
29 mar 2017 11:31:05