PHP为Wordpress自定义摘录长度组合了2个函数
我目前正在创建一个Wordpress主题,我有一个显示标题和摘录的区域,但是根据标题的长度,摘录的长度需要不同(即标题和摘录都占用固定空间)。因此,我需要一种根据文章标题的长度动态更改摘录长度的方法 我看到了两段可能有用的代码。第一部分如下: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
<?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;
}
?>