在本地循环中调用自定义摘录函数

时间:2017-06-05 作者:JPB

我有一个函数,可以将第一篇文章的摘录长度设置为与后面的文章不同的长度,但我无法让它正常工作。如有任何意见,将不胜感激。

functions.php (功能)

function custom_excerpt ($query) {
if ($query->current_post == 0)
 $excerpt = wp_trim_words ($query->post->post_excerpt, 60);
else
 $excerpt = wp_trim_words ($query->post->post_excerpt, 30);
return $excerpt;
}

add_filter( \'excerpt_length\', \'custom_excerpt\' );`
home.php (回路)

<div class="section-content section-news-content">
<?php

$args = array(
        \'posts_per_page\' => 5,
        \'post_type\' => \'post\',
        \'cat\'=>2,
    );

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
         $query->the_post();
            get_template_part( \'template-parts/content\', \'news\' );
        }
            wp_reset_postdata();
    }
?>
</div>`
content-news.php (从循环中调用函数)

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<div class="excerpts">

<div class="post-text">
<div class="entry-content">
    <span class="entry-text">   
        <?php

        custom_excerpt();

        ?>
    </span>
 </div><!-- .entry-content -->
     </div>

</div>
</article>`
编辑:我的问题还没有完全得到回答,我刚刚意识到为什么。要澄清的是,这些摘录不是手动添加的,它们是\\u帖子的\\u摘录。我的问题的另一个内在原因是我有多个循环,每个循环可能需要不同的摘录长度,例如第一个循环,只有第一个摘录不同。第二个循环,第三个摘录是不同的。我对没有澄清表示歉意。

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

注意excerpt_length 过滤器不是这样工作的。它需要一个参数,$length, 这是摘录的字长。

更新的解决方案首先连接回调函数wpse_default_excerpt_length()excerpt_length 滤器这是默认的摘录长度处理程序。

接下来,一些额外的excerpt_length回调函数是声明的,但我们不会将它们连接到这里。相反,这将在自定义查询本身中处理(请参阅下面的home.php部分)。

functions.php

/**
 * Set the excerpt lengths for the **main** query.
 *
 * @param int $length Excerpt length.
 * @return int
 */
add_filter( \'excerpt_length\', \'wpse_default_excerpt_length\', 100 );
function wpse_default_excerpt_length( $length ) {
    global $wp_query;

    // If we\'re on the first post of the first page of posts:
    if ( $wp_query->current_post == 0 && ! $wp_query->is_paged ) {
        $length = 55;
    } else { // All other posts:
        $length = 20;
    }

    return $length;
}

/**
 * Set the excerpt lengths for a custom query - first post.
 */
function wpse_custom_loop_intro_excerpt_length( $length ) {
    return 60;
}

/**
 * Set the excerpt lengths for a custom query - other posts.
 */
function wpse_custom_loop_excerpt_length( $length ) {
    return 30;
}

home.php

<div class="section-content section-news-content">
<?php
    $args = [
        \'posts_per_page\' => 5,
        \'post_type\' => \'post\',
        \'cat\' => 2,
    ];
    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();

            // If we\'re on the first post of the first page of posts:
            if ( $query->current_post == 0 && ! $query->is_paged ) {
                // Add our particular excerpt_length filter. Note that at priority 200,
                // it will override wpse_default_excerpt_length() at priority 100
                add_filter( \'excerpt_length\', \'wpse_custom_loop_intro_excerpt_length\', 200 );

                get_template_part( \'template-parts/content\', \'news\' );

                // Clean up after ourselves.
                remove_filter( \'excerpt_length\', \'wpse_custom_loop_intro_excerpt_length\', 200 );        

            } else { // All other posts in this custom loop:
                add_filter( \'excerpt_length\', \'wpse_custom_loop_excerpt_length\', 200 );

                get_template_part( \'template-parts/content\', \'news\' );

                remove_filter( \'excerpt_length\', \'wpse_custom_loop_excerpt_length\', 200 );  
            }
        }
        wp_reset_postdata();
    }
?>
</div>

content-news.php

控制摘录长度是通过excerpt_length 以前添加的筛选器。使用the_excerpt() 输出摘录。

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="excerpts">
        <div class="post-text">
            <div class="entry-content">
                <span class="entry-text"><?php the_excerpt(); ?></span>
            </div><!-- .entry-content -->
        </div>
    </div>
</article>

结束

相关推荐

Functions are causing errors

我在插件的PHP上声明一个函数。插件在每个帖子的顶部加载代码(帖子布局是插件的名称)。无法在/home/content/08/10290908/html/wp-content/plugins/post-layout/plugin.php(181):eval()\'d code:4)中重新声明vote\\u-up()(之前在/home/content/08/102908/html/wp-content/plugins/post-layout/plugin.php中声明)。php(181):第36行的eval