Как можно ограничить длину выписки вручную в WP? - PullRequest
3 голосов
/ 09 марта 2019

Можно управлять длиной фрагмента WP сообщения по умолчанию ( Автоматически ), используя следующий фрагмент кода в functions.php;

Из WP Codex

// . Post excerpt adjustment (Auto)
// . ==============================
function wpdocs_custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'wpdocs_custom_excerpt_length', 999 );

Мой вопрос, как вы ограничиваете ручной?

Вы знаете, отрывок, специально добавленный самим пользователем?

(*) Здесь есть 8-летний вопрос здесь , который предоставляет некоторый контекст, но с учетом текущего года и достигнутого прогресса WP, я хочу опубликовать вопрос еще раз и получить некоторую ясность по теме.

Добавлен контекст: (отредактировано: 12 марта 2019 г.)

Дело не в том, что первоначальный ответ на вопрос, опубликованный ранее, не работает, все это, кажется, действительно неуклюже. Я ищу более простой и надежный ответ с использованием фильтра exerpt_length. Вместо того, чтобы использовать что-то вроде следующего, чтобы обрезать текст; ( Если возможно )

function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit);
}

Ответы [ 3 ]

3 голосов
/ 12 марта 2019

У нас по умолчанию в ядре следующая фильтрация:

add_filter( 'get_the_excerpt', 'wp_trim_excerpt' );

, но в пределах wp_trim_excerpt() усечение применяется только к содержимому записи, если не установлен ручной отрывок.

Вот непроверенное предложение для пользовательской фильтрации:

add_filter( 'get_the_excerpt', function( $excerpt, $post ) {
    if ( has_excerpt( $post ) ) {
        $excerpt_length = apply_filters( 'excerpt_length', 55 );
        $excerpt_more   = apply_filters( 'excerpt_more', ' ' . '[…]' );
        $excerpt        = wp_trim_words( $excerpt, $excerpt_length, $excerpt_more );
    }
    return $excerpt;
}, 10, 2 );

, чтобы применить подобное усечение к ручным отрывкам.

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

0 голосов
/ 16 марта 2019

Эта пара функций даст вам контроль над длиной отрывка, включая ручной отрывок, который возвращается, если он доступен, в противном случае возвращается «отрывок» post_content.Они идут в вашем файле функций темы:

function get_excerpt_by_id($post_id, $length = NULL) {
  $length = isset($length) ? $length : apply_filters('excerpt_length', 32);
  $p = get_post($post_id);
  return $p->post_excerpt ? build_excerpt_by_length($p->post_excerpt, $length) : build_excerpt_by_length($p->post_content, $length);
}

function build_excerpt_by_length($content, $length = 32) {
  $excerpt = strip_tags(strip_shortcodes($content));
  $words = explode(' ', $excerpt, $length + 1);
  $words = array_slice($words, 0, $length);
  $result = trim(implode(' ', $words));
  $result = preg_replace('/\W*$/', '', $result);
  $more = apply_filters('excerpt_more', '…');
  if ($result !== '') $result = $content === $result ? $result : $result . $more;
  return $result;
}

Тогда в ваших шаблонах вы можете использовать, позвонив:

get_excerpt_by_id($your_post_id, $preferred_excerpt_length);
0 голосов
/ 13 марта 2019

Попробуйте, я получил этот код отсюда: https://www.wpexplorer.com/wordpress-excerpt-length/

add_filter( 'excerpt_length', function($length) {
    return 20;
} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...