Получение отрывка и заголовка поста по определенному ID?
Я пытаюсь получить отрывок и заголовок поста по определенному ID. Мой ID поста - 6, и мой код выглядит следующим образом
<?php
$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt( $id);
$excerpt = $post->post_excerpt;
?>
<h6><?php the_title(); ?></h6>
<?php echo get_excerpt(190); ?>
Он показывает заголовок поста с ID 6, но неправильный отрывок...
Также у меня есть код для контроля длины отрывка в functions.php
// Изменение длины отрывка
function get_excerpt($count){
$permalink = get_permalink($post->ID);
$excerpt = get_the_content();
$excerpt = strip_tags($excerpt);
$excerpt = substr($excerpt, 0, $count);
$excerpt = substr($excerpt, 0, strripos($excerpt, " "));
$excerpt = $excerpt.'... <a href="'.$permalink.'">Читать далее</a>';
return $excerpt;
}
Буду благодарен за любую помощь...
Ваша функция get_excerpt()
использует global
переменную $post
, которая находится вне области видимости внутри вашей функции.
// Изменение длины цитаты
function get_excerpt($count){
$permalink = get_permalink($post->ID);
$excerpt = get_the_content();
$excerpt = strip_tags($excerpt);
$excerpt = substr($excerpt, 0, $count);
$excerpt = substr($excerpt, 0, strripos($excerpt, " "));
$excerpt = $excerpt.'... <a href="'.$permalink.'">Читать далее</a>';
return $excerpt;
}
Это означает, что когда вы делаете так:
$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt( $id);
Вы пытаетесь получить содержимое текущей записи в цикле, обрезанное на основе ID записи, цитату которой вы пытаетесь получить, но $post
будет вне области видимости и, следовательно, "неопределена". Затем, предполагая, что $post
была установлена,...
$excerpt = $post->post_excerpt;
... вы полностью перезаписываете сгенерированные данные "цитаты" сырыми данными цитаты из текущей записи в цикле.
И затем...
echo get_excerpt(190);
... вы снова получаете цитату из текущей записи в цикле и выводите её.
То, что вы делаете, является ошибочным в нескольких аспектах. Можно предположить, что вы скопировали и вставили этот код, не понимая его, что довольно опасно. Я бы предостерег вас от этого.
Основная функция WordPress get_the_title()
принимает аргумент ID, но get_the_excerpt()
не принимает, поэтому, поскольку вам нужно и то, и другое, лучше всего просто получить объект записи.
$id = 6;
$p = get_post($id);
// var_dump($p);
echo apply_filters('the_title',$p->post_title);
echo apply_filters('the_excerpt',$p->post_excerpt); // для вручную созданной цитаты
Для генерации цитаты из содержимого записи вам понадобится что-то вроде:
$text = $p->post_content;
$text = strip_shortcodes( $text );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]>', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;
Что, по сути, является упрощенной версией основной функции wp_trim_excerpt()
Вы можете контролировать длину цитаты с помощью фильтра excerpt_length
. Как в примере из Codex:
function custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

<?php echo get_excerpt(190); ?>
эта часть неверна. Вы выводите отрывок из id = 190
, просто используйте echo $excerpt
. Также вам не нужна строка <?php echo get_excerpt(190); ?>
Внимательно прочитайте страницы кодекса, там вы найдете множество полезных примеров, которые помогут понять, как работает функция http://codex.wordpress.org/Function_Reference/get_post

Если вы хотите получить экспертные данные конкретной записи с ID 6, вы можете сделать следующим образом:
<?php
$id = 6;
$posts = get_posts($id)
foreach($posts as $post):?>
<h6><?php echo $post->post_title;?></h6>
<p><?php echo $post->post_excerpt();?></p>
<?php endforeach; ?>
Этот код просто выведет заголовок и краткое описание записи с ID 6.
