web-dev-qa-db-ja.com

Excerpt_moreフィルタを実際の投稿の抜粋に適用する方法は?

下記の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) . '">Read More</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();
    }
} ?>    
1
Scott B

テンプレートのどこかでget_blog_excerpt()を呼び出していると仮定しますか?

もしそうなら、単にthe_excerpt()を呼び出してから、2つの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) . '">Read More</a>';
}
add_filter('excerpt_more', 'ce4_excerpt_more');

そしてあなたのテンプレートの中で、あなたはただthe_excerpt()を呼ぶでしょう。

それでもうまくいくのなら、おそらくコンテナ関数にラップされているために、フィルタが適用されていないことが問題だと思います。

1
Chip Bennett