PHP为Wordpress自定义摘录长度组合了2个函数

PHP为Wordpress自定义摘录长度组合了2个函数,php,css,wordpress,function,Php,Css,Wordpress,Function,我目前正在创建一个Wordpress主题,我有一个显示标题和摘录的区域,但是根据标题的长度,摘录的长度需要不同(即标题和摘录都占用固定空间)。因此,我需要一种根据文章标题的长度动态更改摘录长度的方法 我看到了两段可能有用的代码。第一部分如下: <?php // Variable & intelligent excerpt length. function print_excerpt($length) { // Max excerpt length. Leng

我目前正在创建一个Wordpress主题,我有一个显示标题和摘录的区域,但是根据标题的长度,摘录的长度需要不同(即标题和摘录都占用固定空间)。因此,我需要一种根据文章标题的长度动态更改摘录长度的方法

我看到了两段可能有用的代码。第一部分如下:

    <?php
    // Variable & intelligent excerpt length.
    function print_excerpt($length) { // Max excerpt length. Length is set in characters
        global $post;
        $text = $post->post_excerpt;
        if ( '' == $text ) {
            $text = get_the_content('');
            $text = apply_filters('the_content', $text);
            $text = str_replace(']]>', ']]>', $text);
        }
        $text = strip_shortcodes($text); // optional, recommended
        $text = strip_tags($text); // use ' $text = strip_tags($text,'<p><a>'); ' if you want to keep some tags

        $text = substr($text,0,$length);
        $excerpt = reverse_strrchr($text, '.', 1);
        if( $excerpt ) {
            echo apply_filters('the_excerpt',$excerpt);
        } else {
            echo apply_filters('the_excerpt',$text);
        }
    }

    // Returns the portion of haystack which goes until the last occurrence of needle
    function reverse_strrchr($haystack, $needle, $trail) {
        return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) + $trail) : false;
    }
。下面的代码根据标题长度更改摘录长度。我将如何组合这两段代码

        <?php
        // Dynamically resize excerpt according to title length
        $rem_len = ""; //clear variable
        $title_len = strlen($post->post_title); //get length of title
        if($title_len <= 35){
            $rem_len=188; //calc space remaining for excerpt
        }elseif($title_len <= 70){
            $rem_len=146;
        }elseif($title_len <= 105){
            $rem_len=104;
        }elseif($title_len <= 140){
            $rem_len=62;
        }
        $trunc_ex = substr($post->post_excerpt, 0, $rem_len); //truncate excerpt to fit remaining space
        if(strlen($trunc_ex) < strlen($post->post_excerpt)) $trunc_ex = $trunc_ex . " [...]";
        echo "<p>" . $trunc_ex . "</p>"; //display excerpt
        ?>

已解决:

<?php
// Variable & intelligent excerpt length.
function print_excerpt($title) { // Max excerpt length. Length is set in characters
global $post;

$rem_len = ""; //clear variable
$title_len = strlen($title); //get length of title
$excerpt_line=40;
if($title_len <= 17){
    $rem_len=$excerpt_line*8; //calc space remaining for excerpt
}elseif($title_len <= 34){
    $rem_len=$excerpt_line*7;
}elseif($title_len <= 51){
    $rem_len=$excerpt_line*6;
}elseif($title_len <= 68){
    $rem_len=$excerpt_line*5;
}elseif($title_len <= 85){
    $rem_len=$excerpt_line*4;
}

$text = $post->post_excerpt;
if ( '' == $text ) {
    $text = get_the_content('');
    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]>', $text);
}
$text = strip_shortcodes($text); // optional, recommended
$text = strip_tags($text,'<p>'); // use ' $text = strip_tags($text,'<p><a>'); ' if you want to keep some tags

$text = substr($text,0,$rem_len);
$excerpt = reverse_strrchr($text, ' ', 1);
if( $excerpt ) {
    echo apply_filters('the_excerpt',$excerpt);
} else {
    echo apply_filters('the_excerpt',$text);
}

}

    // Returns the portion of haystack which goes until the last occurrence of needle
function reverse_strrchr($haystack, $needle, $trail) {
    return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack,     $needle) + $trail) : false;
}
?>