Получение отрывка и заголовка поста по определенному ID?

18 дек. 2012 г., 08:32:18
Просмотры: 20.7K
Голосов: 1

Я пытаюсь получить отрывок и заголовок поста по определенному 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;
}

Буду благодарен за любую помощь...

0
Все ответы на вопрос 5
0

Ваша функция 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(']]>', ']]&gt;', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
$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 );
9 мар. 2014 г. 18:53:07
2

<?php echo get_excerpt(190); ?> эта часть неверна. Вы выводите отрывок из id = 190, просто используйте echo $excerpt. Также вам не нужна строка <?php echo get_excerpt(190); ?>

Внимательно прочитайте страницы кодекса, там вы найдете множество полезных примеров, которые помогут понять, как работает функция http://codex.wordpress.org/Function_Reference/get_post

18 дек. 2012 г. 08:53:20
Комментарии

не работает... <?php echo get_excerpt(190); ?> управление отрывком...

Gopal Bhattacharjee Gopal Bhattacharjee
18 дек. 2012 г. 09:56:12

также у меня есть длина отрывка в function.php

Gopal Bhattacharjee Gopal Bhattacharjee
18 дек. 2012 г. 10:40:11
0

Похоже, у вас много всего происходит...

Я бы попробовал следующее:

$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt('190');

И использовал бы это для вывода анонса:

echo $excerpt;
31 окт. 2013 г. 06:37:29
1

Почему вы не выводите переменную $excerpt? Думаю, это должно сработать. Не делайте так:

<?php echo get_excerpt(190); ?>

делайте так:

<?php echo $excerpt; ?>
18 дек. 2012 г. 09:30:51
Комментарии

отрывок отображается, но ссылка "читать далее" отсутствует...

Gopal Bhattacharjee Gopal Bhattacharjee
18 дек. 2012 г. 14:11:59
0

Если вы хотите получить экспертные данные конкретной записи с 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.

5 янв. 2014 г. 12:02:38