Предельная длина первой выдержки в цикле

Искал везде, но, похоже, это не пришло. Я ищу, чтобы установить длину выдержек в цикле в functions.php но мне нужно, чтобы первый пост имел только двойные символы, как остальные.

Пример: 1-й пост установлен на 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' ); 

Есть идеи?

Чтобы определить, где вы находитесь внутри цикла в этом фильтре, вам нужно будет получить доступ к глобальному основному запросу . Как это:

 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; } 

Остерегайтесь того, что выше будет нуждаться в настройке, например, чтобы учесть случаи, когда определенная выдержка не определена (в этом случае вы можете использовать содержимое сообщения для обрезки).