限制循环中第一个摘录的长度

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

到处搜索,但似乎都没有找到。我想在循环中设置摘录的长度functions.php 但我只需要第一篇文章的字符是其他文章的两倍。

示例:第一篇文章设置为60个字符,后面的文章设置为30个字符。

我试过这个,但不起作用:

function custom_excerpt_length( $length ) 
{
    static $instance = 0;
    return ( in_the_loop() && 0 == $instance++ ) ? 60 : 30;
}
add_filter( \'excerpt_length\', \'custom_excerpt_length\' );
有什么想法吗?

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

要确定您在该过滤器中的循环中的位置,您必须访问global main query. 像这样:

add_filter (\'excerpt_length\', \'wpse268679_custom_excerpt_length\');

function wpse268679_custom_excerpt_length ($length) {
  // access main query
  global $wp_query;
  // do this only for the main loop and the first post in the query
  if (is_main_query() && ($wp_query->current_post == 0))
    $length = 60;
  else
    $length = 30;
  return $length;
  }
以上仅适用于主回路。如果有本地循环,则无法全局访问查询,因此必须构建自己的摘录函数,该函数将传递查询而不是帖子。这并不难。像这样:

 wpse268679_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;
   }
请注意,上述内容需要调整,例如考虑到没有定义摘录的情况(在这种情况下,您可能希望使用帖子内容进行修剪)。

结束

相关推荐

Make loop alphabetical

我有一个简单的循环,但它以任意顺序返回。我要找的是按字母顺序排列循环。我尝试了一些不同的方法,但似乎无法奏效。<?php // Start the loop. while ( have_posts() ) : the_post(); // Include the page content template. get_template_part( \'content\', \'grid-projects\' ); // End t