如何限制WP中的手册摘录长度?

时间:2019-03-09 17:23:36

标签: php wordpress function

使用functions.php中的以下代码片段,可以控制WP帖子的WP默认(自动)摘录长度;

来自WP Codex

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

我的问题是您如何限制手册?

     

您知道吗,由用户自己专门添加的摘录?

(*)有一个8年的问题here,它确实提供了一些背景信息,但是鉴于当前的年份和进展,WP已经使我想再次发布该问题,并在主题。

添加的上下文:(编辑:2019年3月12日)

这并不是说早先发布的问题的原始答案不起作用,但看起来确实很笨拙。我正在寻找使用exerpt_length过滤器的更简单且更可靠的答案。而不是使用以下内容来修剪文本; (如果可能

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

4 个答案:

答案 0 :(得分:2)

默认情况下,我们在核心中进行以下过滤:

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

对手动摘录进行类似的修整。

希望您可以根据自己的需要进行进一步调整。

答案 1 :(得分:0)

尝试一下,我从这里获得了这段代码:https://www.wpexplorer.com/wordpress-excerpt-length/

add_filter( 'excerpt_length', function($length) {
    return 20;
} );

答案 2 :(得分:0)

这对函数将使您可以控制摘录的长度,包括返回的摘录(如果有),否则,将返回“摘录化的” 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);

答案 3 :(得分:0)

您可以尝试以下代码

$excerpt = get_the_excerpt(); 
$excerpt = substr( $excerpt, 0, 180 ); 
$excerpt_description = substr( $excerpt, 0, strrpos( $excerpt, ' ' ) );
echo $excerpt_description;