Mostrar solo el comienzo del post

28 mar 2017, 17:34:09
Vistas: 272
Votos: 0

Sé que normalmente esta es una pregunta obvia con muchas respuestas (como aquí), pero me gustaría mostrar solo el comienzo de los posts con un botón de "leer más". No uso extractos, así que me gustaría que WordPress tomara automáticamente las primeras 55 palabras o la primera frase para mostrarlo.

Uso el tema Toivo Lite. El index.php es:

<?php
get_header(); ?>

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

    <?php do_action( 'toivo_before_loop' ); // Gancho de acción antes del bucle. ?>

    <?php /* Comienza el Bucle */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

        <?php
            /* Incluye la plantilla específica del Formato de Post para el contenido.
             * Si quieres sobrescribir esto en un tema hijo, entonces incluye un archivo
             * llamado content-___.php (donde ___ es el nombre del Formato de Post) y ese será usado en su lugar.
             */
            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'          => __( 'Página anterior', 'toivo-lite' ),
            'next_text'          => __( 'Página siguiente', 'toivo-lite' ),
            'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Página', 'toivo-lite' ) . ' </span>',
        ) );
    ?>

<?php else : ?>

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

<?php endif; ?>

<?php do_action( 'toivo_after_loop' ); // Gancho de acción después del bucle. ?>

<?php get_footer(); ?>

He intentado reemplazar los dos content por excerpt, pero entonces la página aparece vacía (solo cabecera y pie).

0
Todas las respuestas a la pregunta 2
4

Intenta reemplazar esto:

        <?php
            /* Incluye la plantilla específica del Formato de Entrada para el contenido.
             * Si deseas sobrescribir esto en un tema hijo, entonces incluye un archivo
             * llamado content-___.php (donde ___ es el nombre del Formato de Entrada) y ese será usado en su lugar.
             */
            get_template_part( 'content', ( post_type_supports( get_post_type(), 'post-formats' ) ? get_post_format() : get_post_type() ) );
        ?>

Con esto:

<?php echo my_excerpt(get_the_ID(), 300, 'Leer más'); ?>

Y luego añade esto a tu archivo 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;
}

Por defecto esto retornará los primeros 300 caracteres del contenido de la entrada. Cambia el "300" en la llamada a my_excerpt por el número de caracteres que deseas retornar (nota, esto no es cuántas palabras retornar, sino cuántos caracteres).

28 mar 2017 17:51:01
Comentarios

Esto no funciona. Se muestran los primeros 300 caracteres, pero no hay ningún formato ni títulos... Todo está en un solo bloque.

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

Sí, este código elimina todo eso. Si no quieres que lo elimine, entonces cambia esta línea: if(empty($excerpt)) $excerpt = strip_shortcodes(strip_tags(apply_filters('the_excerpt', get_post_field('post_content', $postid)))); por esto en su lugar: if(empty($excerpt)) $excerpt = apply_filters('the_excerpt', get_post_field('post_content', $postid));

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

Esto es mejor, pero todavía no hay títulos o formato (ocupa todo el ancho en lugar de solo la columna).

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

En ese caso, prueba esto en su lugar para esa línea: if(empty($excerpt)) $excerpt = get_post_field('post_content', $postid); eso mostrará el contenido literalmente pero podría ser peligroso porque si hay algún HTML devuelto al principio de la publicación, se contará en el recuento de caracteres, lo que potencialmente podría dar lugar a contenido de diferente longitud devuelto de una publicación a otra.

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

Puedes probar lo siguiente:

    <?php
    get_header(); ?>

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

        <?php do_action( 'toivo_before_loop' ); // Gancho de acción antes del bucle. ?>

        <?php /* Comienza el Bucle */ ?>
        <?php while ( have_posts() ) : the_post(); ?>

            <?php
            /* Incluye la plantilla específica del Formato de Entrada para el contenido.
            * Si deseas sobrescribir esto en un tema hijo, entonces incluye un archivo
            * llamado content-___.php (donde ___ es el nombre del Formato de Entrada) y ese será usado en su lugar.
            */
            echo wp_trim_words( get_the_content(), $num_words = 50, $more = '...' );
            echo '<a href="'.get_the_permalink().'">Leer más</a>';
            ?>

        <?php endwhile; ?>

        <?php
        the_posts_pagination( array(
        'prev_text'          => __( 'Página anterior', 'toivo-lite' ),
        'next_text'          => __( 'Página siguiente', 'toivo-lite' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Página', 'toivo-lite' ) . ' </span>',
        ) );
        ?>

    <?php else : ?>

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

    <?php endif; ?>

    <?php do_action( 'toivo_after_loop' ); // Gancho de acción después del bucle. ?>

    <?php get_footer(); ?>

He reemplazado:

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

Alguien podría decirme que este es el enfoque incorrecto, pero podría ayudarte. Mostrará las primeras 50 palabras del contenido con un "..." al final.

28 mar 2017 19:40:53
Comentarios

¿Dónde se supone que debo poner eso?

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

Por favor, haz clic en el edit enlace debajo de tu respuesta para agregar más información sobre dónde puedes poner esto, junto con cualquier formateo de código necesario.

Howdy_McGee Howdy_McGee
28 mar 2017 20:14:04

He editado el código para que tenga más sentido, espero que esto ayude.

Joe Joe
29 mar 2017 11:31:05