Показывать только начало поста

28 мар. 2017 г., 17:34:09
Просмотры: 272
Голосов: 0

Я знаю, что это довольно очевидный вопрос с множеством ответов (например, здесь), но я хочу показывать только начало постов с кнопкой "читать далее". Я не использую анонсы, поэтому хочу, чтобы WordPress автоматически брал первые 55 слов или первую фразу для отображения.

Я использую тему Toivo Lite. Файл index.php выглядит так:

<?php
get_header(); ?>

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

    <?php do_action( 'toivo_before_loop' ); // Хук действия перед циклом. ?>

    <?php /* Начало цикла */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

        <?php
            /* Подключение шаблона для контента в зависимости от формата.
             * Если вы хотите переопределить это в дочерней теме, включите файл
             * content-___.php (где ___ - имя формата поста), который будет использован вместо стандартного.
             */
            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'          => __( 'Предыдущая страница', 'toivo-lite' ),
            'next_text'          => __( 'Следующая страница', 'toivo-lite' ),
            'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Страница', 'toivo-lite' ) . ' </span>',
        ) );
    ?>

<?php else : ?>

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

<?php endif; ?>

<?php do_action( 'toivo_after_loop' ); // Хук действия после цикла. ?>

<?php get_footer(); ?>

Я пробовал заменить два content на excerpt, но тогда страница становится пустой (только шапка и подвал).

0
Все ответы на вопрос 2
4

Попробуйте заменить это:

        <?php
            /* Включить шаблон для определенного формата записи.
             * Если вы хотите переопределить это в дочерней теме, включите файл
             * с названием content-___.php (где ___ - это название формата записи), который будет использоваться вместо стандартного.
             */
            get_template_part( 'content', ( post_type_supports( get_post_type(), 'post-formats' ) ? get_post_format() : get_post_type() ) );
        ?>

На это:

<?php echo my_excerpt(get_the_ID(), 300, 'Читать далее'); ?>

И затем добавьте это в файл 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;
}

По умолчанию это будет возвращать первые 300 символов содержимого записи. Измените значение "300" в вызове функции my_excerpt на нужное вам количество символов (обратите внимание, что это не количество слов, а количество символов).

28 мар. 2017 г. 17:51:01
Комментарии

Это не работает. Первые 300 символов отображаются, но нет никакого форматирования или заголовков... Весь текст представлен одним блоком.

Shan-x Shan-x
28 мар. 2017 г. 18:35:05

Да, этот код удаляет все это. Если вы не хотите, чтобы это удалялось, измените эту строку: if(empty($excerpt)) $excerpt = strip_shortcodes(strip_tags(apply_filters('the_excerpt', get_post_field('post_content', $postid)))); на это: if(empty($excerpt)) $excerpt = apply_filters('the_excerpt', get_post_field('post_content', $postid));

Industrial Themes Industrial Themes
28 мар. 2017 г. 18:39:16

Так лучше, но заголовки и форматирование все еще отсутствуют (текст занимает всю ширину вместо колонки).

Shan-x Shan-x
28 мар. 2017 г. 18:42:50

В таком случае, попробуйте вместо этого использовать для этой строки: if(empty($excerpt)) $excerpt = get_post_field('post_content', $postid); это выведет содержимое дословно, но может быть опасным, потому что если в начале поста есть какой-либо HTML-код, он будет учитываться в подсчёте символов, что потенциально может привести к возвращению контента разной длины от поста к посту.

Industrial Themes Industrial Themes
28 мар. 2017 г. 18:44:18
3

Вы можете попробовать следующий вариант:

    <?php
    get_header(); ?>

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

        <?php do_action( 'toivo_before_loop' ); // Хук перед циклом. ?>

        <?php /* Начало цикла */ ?>
        <?php while ( have_posts() ) : the_post(); ?>

            <?php
            /* Подключение шаблона контента в зависимости от формата записи.
            * Если вы хотите переопределить это в дочерней теме, включите файл
            * с именем content-___.php (где ___ - это название формата записи), и он будет использован вместо стандартного.
            */
            echo wp_trim_words( get_the_content(), $num_words = 50, $more = '...' );
            echo '<a href="'.get_the_permalink().'">Читать далее</a>';
            ?>

        <?php endwhile; ?>

        <?php
        the_posts_pagination( array(
        'prev_text'          => __( 'Предыдущая страница', 'toivo-lite' ),
        'next_text'          => __( 'Следующая страница', 'toivo-lite' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Страница', 'toivo-lite' ) . ' </span>',
        ) );
        ?>

    <?php else : ?>

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

    <?php endif; ?>

    <?php do_action( 'toivo_after_loop' ); // Хук после цикла. ?>

    <?php get_footer(); ?>

Я заменил:

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

На:

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

Кто-то может сказать, что это неправильный подход, но он может вам помочь. Это отобразит первые 50 слов контента с многоточием "..." в конце.

28 мар. 2017 г. 19:40:53
Комментарии

Куда мне это нужно поместить?

Shan-x Shan-x
28 мар. 2017 г. 19:42:51

Пожалуйста, нажмите на ссылку edit под вашим ответом, чтобы добавить больше информации о том, куда это можно поместить, а также любые необходимые форматирования кода.

Howdy_McGee Howdy_McGee
28 мар. 2017 г. 20:14:04

Я отредактировал код, чтобы он стал более понятным, надеюсь, это поможет.

Joe Joe
29 мар. 2017 г. 11:31:05