/ Wordpress / Особенности excerpt

Особенности excerpt

HIT

09.12.2015

3492

1

Анонс (отрывок) статьи можно выводить различными способами. Можно использовать как дополнительное поле для краткой информации в превью записи.

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

Чтобы отключить кнопку More или […] нужно сделать ее пустой:

function new_excerpt_more( $more ) {
    return '';
}
add_filter('excerpt_more', 'new_excerpt_more');

Проверка заполнен ли отрывок

Если выводить 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
);
}
}
[site-socialshare]
  • Комментарии
  • Вложения

Добавить комментарий

1 комментарий

  1. Максим

    Спасибо! Очень помогло, особенно проверка на то заполнен ли отрывок. Долго с этим мучился тут нашел решение

Особенности excerpt
Slanted CSS
Рекомендации для васSlanted CSSOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.