Анонс (отрывок) статьи можно выводить различными способами. Можно использовать как дополнительное поле для краткой информации в превью записи.
the_excerpt(); без заполнения поля отрывок
При этом методе, в excerpt подгружается определенное количество символов (можно настраивать количество в файле funсtions) без html тэгов.
the_excerpt(); с заполнением поля отрывок
В этом методе, в анонс также подгружается определенное количество символов, но уже с html тэгами и шорткодами.
Добавление в основной пост разделителя more
Для вывода в шаблоне используем the_content(), поддерживаются html тэги и шорткоды. Длина анонса регулируется автором статьи.
Для разделения анонса от остальной статьи — ставим
<!--more-->
Включение и настройка excerpt
В файле funсtions.php
// добавление анонса в редактировании страницы add_post_type_support( 'page', 'excerpt' ); // настройка количества символов анонса по-умолчанию function custom_excerpt_length() { $length = 30; return $length; } add_filter('excerpt_length', 'custom_excerpt_length'); // заменяем символ [...] в конце анонса на произвольный + ссылка на пост function mayak_segment_more($more) { return ' <a href="'. get_permalink($post->ID) . '">Читать далее »</a>'; } add_filter('excerpt_more', 'mayak_segment_more'); // отключение в анонсах стандартного форматировнаие wordpress remove_filter( 'the_excerpt', 'wptexturize' );
Стили анонса
Проверка заполнен ли отрывок
Если выводить the_excerpt() и не заполнить поле Отрывок, то будет выводить первый абзац основного контента, чтобы этого избежать и выводить только введенный текст, надо делать проверку
<?php if( has_excerpt( $id ) ): ?><small><?php the_excerpt(); ?></small><?php endif; ?>
Визуальный редактор в анонсе
Данная функция включает визуальный редактор не только в анонсе, но и в других textarea админки: описания категорий, произвольные textarea.
add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) ); /* Replaces the default excerpt editor with TinyMCE */ class T5_Richtext_Excerpt { /* Replaces the meta boxes.* * @return void */ public static function switch_boxes() { if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) ) { return; } remove_meta_box( 'postexcerpt', // ID '', // Screen, empty to support all post types 'normal' // Context ); add_meta_box( 'postexcerpt2', // Reusing just 'postexcerpt' doesn't work. __( 'Excerpt' ), // Title array ( __CLASS__, 'show' ), // Display function null, // Screen, we use all screens with meta boxes. 'normal', // Context 'core' // Priority ); } /* Output for the meta box. * @param object $post * @return void */ public static function show( $post ) { ?> <label class="screen-reader-text" for="excerpt"><?php _e( 'Excerpt' ) ?></label> <?php // We use the default name, 'excerpt', so we don’t have to care about // saving, other filters etc. wp_editor( self::unescape( $post->post_excerpt ), 'excerpt', array ( 'textarea_rows' => 15, 'media_buttons' => FALSE, 'teeny' => TRUE, 'tinymce' => TRUE ) ); } /* The excerpt is escaped usually. This breaks the HTML editor. * @param string $str * @return string */ public static function unescape( $str ) { return str_replace( array ( '<', '>', '"', '&', ' ', '&nbsp;' ), array ( '<', '>', '"', '&', ' ', ' ' ), $str ); } }