要确定您在该过滤器中的循环中的位置,您必须访问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;
}
请注意,上述内容需要调整,例如考虑到没有定义摘录的情况(在这种情况下,您可能希望使用帖子内容进行修剪)。