Как применить фильтр excerpt_more к фактическому отрывку записи?

17 июн. 2011 г., 22:26:51
Просмотры: 5.8K
Голосов: 1

В функции get_blog_excerpt() ниже, фильтр excerpt_more прекрасно работает, когда отрывок записи отсутствует, однако, когда запись имеет отрывок, я не получаю ссылку "Читать далее".

Я понимаю, что the_excerpt сначала проверяет наличие отрывка записи, что нормально, но я хочу, чтобы ссылка "Читать далее" применялась и в этом случае.

Что мне нужно изменить, чтобы фильтр excerpt_more применялся во всех случаях?

function get_blog_excerpt(){
    add_filter('excerpt_length', 'ce4_excerpt_length');
    add_filter('excerpt_more', 'ce4_excerpt_more');
    return the_excerpt();
}

function ce4_excerpt_length($length) {
    return 150;
}

function ce4_excerpt_more($more) {
    global $post;
    return '...<a href="'. get_permalink($post->ID) . '">Читать далее</a>';
}

function get_blog_links(){
    global $post;
    setup_postdata($post);
    $myposts = get_posts($args);echo '<div id="menuFooterRecent" class="blog">'; 
    echo '<ul>'; 
    foreach($myposts as $idx=>$post){ ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php 
    echo get_blog_excerpt();
    echo '<div style="clear:both">&nbsp;</div>';?></li>
    <?php } echo '</ul></div>';
}

Приведенный выше код находится в файле functions.php

Следующий код находится в файле archive.php

<?php 
if(is_category()){
    if (get_query_var('cat') == get_category_by_slug('blog')->term_id){
        get_blog_links();
    }
    else 
    {
    get_category_links();
    }
} ?>    
4
Комментарии

Где вызывается (или подключен) get_blog_excerpt()?

Chip Bennett Chip Bennett
17 июн. 2011 г. 22:33:25

Изнутри функции в functions.php

Scott B Scott B
17 июн. 2011 г. 23:23:58

Может быть вызвано плагином. У меня была точно такая же проблема - мой код в functions.php для изменения длины и вида анонса работал нормально (проверено на чистой установке WP), но был "убит" плагином, в моем случае 'Event Calendar 3.1.4'. Все работает нормально, если отключить плагин. Попробуйте проверить в этом направлении.

kevin kevin
21 июл. 2011 г. 18:53:59

Решил свою проблему с помощью этого плагина: http://wordpress.org/extend/plugins/advanced-excerpt/

kevin kevin
21 июл. 2011 г. 19:00:56
Все ответы на вопрос 1
3

Я предполагаю, что вы вызываете get_blog_excerpt() где-то в вашем шаблоне?

Если это так, что произойдет, если вы просто вызовете the_excerpt(), а затем вынесете два вызова add_filter() из функции-обертки? То есть functions.php будет выглядеть так:

function ce4_excerpt_length($length) {
    return 150;
}
add_filter('excerpt_length', 'ce4_excerpt_length');

function ce4_excerpt_more($more) {
    global $post;
    return '...<a href="'. get_permalink($post->ID) . '">Читать далее</a>';
}
add_filter('excerpt_more', 'ce4_excerpt_more');

И в вашем шаблоне вы просто вызываете the_excerpt().

Если это сработает, то я подозреваю, что проблема в том, что ваши фильтры не применяются - вероятно, из-за того, что они обернуты в функцию-контейнер.

17 июн. 2011 г. 22:38:07
Комментарии

Chip, спасибо за совет. Но перенос фильтров за пределы контейнера, похоже, не влияет на работу скрипта. Он работает одинаково в обоих случаях.

Scott B Scott B
17 июн. 2011 г. 23:29:23

get_blog_excerpt вызывается из функции внутри functions.php, которая, в свою очередь, вызывается из функции вне цикла в archive.php

Scott B Scott B
17 июн. 2011 г. 23:30:32

Так ты пробовал просто вызвать the_excerpt()?

Chip Bennett Chip Bennett
18 июн. 2011 г. 00:20:57