2017-02-22 57 views
2

На моей странице single.php Я пытаюсь создать функцию, чтобы дать мне пользовательскую длину отрывки определенной записи по идентификатору.Мой пользовательский get_the_excerpt() не может получить отрывок из ID

Ниже приведены мои две функции, которыми я бегу.

/* Custom get_the_excerpt to allow getting Post excerpt by ID */ 
function custom_get_the_excerpt($post_id) { 
    global $post; 
    $save_post = $post; 
    $post = get_post($post_id); 
    $output = get_the_excerpt($post); 
    $post = $save_post; 
    return $output; 
} 

/* Change Excerpt length */ 
function excerpt($num, $post_id = '') { 
    $limit = $num+1; 
    $excerpt = explode(' ', custom_get_the_excerpt($post_id), $limit); 
    array_pop($excerpt); 
    $excerpt = implode(" ",$excerpt)."&#8230"; 
    echo $excerpt; 
} 

Что я использую для вызова функции.

<?php $previous = get_previous_post(); 
echo excerpt('30', $previous -> ID); ?> 

Проблема Я бегу в $ пост дает мне предыдущую информацию пост, однако, когда я прохожу, что в get_the_excerpt возвращает текущую запись отрывка, а не предыдущий пост отрывка.

EDIT

Измененная функция это после того, как несколько человек сказали мне, что я могу просто передать $ post_id в get_the_excerpt()

/* Change Excerpt length */ 
function excerpt($num, $post_id = '') { 
    $limit = $num+1; 
    $excerpt = explode(' ', get_the_excerpt($post_id), $limit); 
    array_pop($excerpt); 
    $excerpt = implode(" ",$excerpt)."&#8230"; 
    echo $excerpt; 
} 

Все еще без изменений.

+0

Опечатка, что у вас есть пробелы вокруг «->» в «echo excerpt ('30», $ previous -> ID); 'Я уверен, что это не сработает - и я подозреваю, что в вашем пользовательском вызове $ post_id не определен, поэтому он использует текущую $ post. Кроме того, я уверен, что вам не нужно беспокоиться о 'get_post' - просто передайте post_id, чтобы get_the_excerpt работал. – MacPrawn

+0

Без изменений без пробелов вокруг "->" Также вы правы, я могу просто передать $ post_id, но это тоже не изменит проблему. :( –

ответ

0

следующие функции получить два parmeters: - $ Num: количество персонажа вы бы отобразить - $ post_id: идентификатор поста вы хотите, чтобы получить содержание

и: - если в содержание есть метка, возвращать текст до тех пор, пока он не будет - если $ num is = 0 возвращает содержимое до первой полной остановки , в противном случае возвращаем число символов, указанное в $ num, добавляя «...» в конце строки

function my_custom_excerpt($num = 0,$post_id=''){ 
$post=get_post($post_id); 
$content=$post->post_content; 
if(strpos($content,'&lt;!&#8211;more&#8211;&gt;')>0){ 
    return substr($content,0,strpos($content,'&lt;!&#8211;more&#8211;&gt;')); 
}else{ 
    if($num===0){ 
     return substr($content,0,strpos($content,'.')+1); 
    }else{ 
     return substr($content,0,$num).((strlen($content)>$num)?"...":""); 
    } 
} 
} 
1

Addi ng в setup_postdata ($ post); исправлена ​​моя проблема.

function custom_get_the_excerpt($post_id) { 
    global $post; 
    $save_post = $post; 
    $post = get_post($post_id); 
    setup_postdata($post); 
    $output = get_the_excerpt($post); 
    wp_reset_postdata(); 
    $post = $save_post; 
    return $output; 
}