Пользовательские поля или что-то еще

У меня проблема с отображением некоторого контента на моей домашней странице. Сначала я собираюсь объяснить свою проблему. У меня есть страница со всеми моими сообщениями в блоге (использование функции выдержки). Когда вы нажимаете на ссылку «Читать дальше» на странице сообщений блога, вы получаете всю статью.

На моей главной странице я хочу показать 3 последних сообщений. У меня уже есть верхние 3 позиции. (с использованием функции выдержки), но эти тизеры или длинные. Много текста. Я не хочу делать это короче, потому что когда я это сделаю, страница со всеми блогами также изменится.

Я думал использовать пользовательские поля в сообщениях блога. Тогда я могу сделать дополнительное поле для содержимого тизера на главной странице? Это правильное решение или есть что-то еще?

Пользовательские поля идеально подходят для этого, когда вы не хотите отличной длины выдержки, но также и другого содержимого выдержки.

Следующий код добавит дополнительный редактор TinyMCE на страницу администратора Edit Post, чтобы вы могли писать отформатированную выдержку специально для своей главной страницы. Выдержка будет сохранена в пользовательском поле _wpse83958_front_page_excerpt . Предшествующее подчеркивание делает его невидимым в Custom Fields метаболизма.

Поместите его в свои functions.php :

 // Do not use 'add_meta_boxes' with TinyMCE add_action( 'edit_form_advanced', 'wpse83958AddFrontPageExcerptEditor' ); add_action( 'save_post', 'wpse83958SaveFrontPageExcerpt' ); function wpse83958AddFrontPageExcerptEditor() { global $post; wp_nonce_field( 'wpse83958_front_page_excerpt', 'wpse83958_front_page_excerpt_noncename' ); echo '<h2>Front page excerpt</h2>'; // 'textarea_name' argument is necessary because of 'editor_id' parameter limitations (http://codex.wordpress.org/Function_Reference/wp_editor#Parameters) // See http://core.trac.wordpress.org/ticket/19173 for information about Editor moving (drag'n'drop) // second argument ($editor_id) must contain lowercase letters ONLY ([az]) wp_editor( get_post_meta($post->ID, '_wpse83958_front_page_excerpt', true), 'wpse83958frontpageexcerpt', array( 'textarea_name' => 'wpse83958_front_page_excerpt', 'wpautop' => true ) ); } function wpse83958SaveFrontPageExcerpt( $post_id ) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if( isset($_POST['wpse83958_front_page_excerpt']) && !wp_verify_nonce( $_POST['wpse83958_front_page_excerpt_noncename'], 'wpse83958_front_page_excerpt' ) ) return; if ( !current_user_can( 'edit_page', $post_id ) || !current_user_can( 'edit_post', $post_id ) ) return; $wpse83958_front_page_excerpt = $_POST['wpse83958_front_page_excerpt']; if('' != $wpse83958_front_page_excerpt) update_post_meta($post_id, '_wpse83958_front_page_excerpt', $wpse83958_front_page_excerpt); else delete_post_meta($post_id, '_wpse83958_front_page_excerpt'); } 

И получите выдержку внутри цикла главной страницы:

 $front_page_excerpt = get_post_meta($post->ID, '_wpse83958_front_page_excerpt', true); // Change double linebreaks to '<p>' elements as only 'the content' and 'the excerpt' do use them automatically $front_page_excerpt = wpautop($front_page_excerpt); echo $front_page_excerpt; 

Я думаю, что вы пытаетесь спросить.

Как я могу иметь несколько длин выдержек?

См. Этот аналогичный вопрос в StackOverflow

https://stackoverflow.com/questions/4082662/multiple-excerpt-lengths-in-wordpress

Нет необходимости в настраиваемых полях. WordPress уже имеет это – метатекст Excerpt. В WP3.2 + это обычно скрыто по умолчанию. Чтобы отобразить это текстовое поле, откройте «Параметры экрана», расположенные в правом верхнем углу экрана редактирования сообщений, затем найдите флажок выдержки и включите его. Теперь вы должны увидеть текстовое поле Excerpt, расположенное ниже редактора содержимого. Напишите свой пользовательский отрывок здесь.

Используя настраиваемое поле, вы сможете использовать собственный текст вместо простого усеченного текста, который лучше всего подходит для SEO: вы можете писать настоящие тизеры. Но это также большая работа при публикации.

Если нет точки, вам просто нужно изменить длину исключения, я бы использовал одну встроенную функцию WP, которая является wp_trim_words ( http://codex.wordpress.org/Function_Reference/wp_trim_words ).

Я бы предложил эту структуру:

 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); static $firsts = 0; ?> <section> <h1><?php the_title(); ?></h1> <article> <? if ( $firsts < 3 ) { $extrait = $post->post_excerpt; if ( $extrait ) { echo wp_trim_words( $extrait, 10, '[...]' ); // 10 words } else { $extrait = strip_tags ( get_the_content() ); // if no excerpt, use content echo wp_trim_words( $extrait, 10, '[...]' ); // 10 words } } else { the_excerpt(); } ?> </article> </section> <? $firsts++; endwhile; endif; ?> 

Таким образом, вы могли бы иметь специально написанную выдержку, используя выделенное поле в сообщении, вырезать определенное число для первых трех сообщений и автоматическую выдержку для остальной части цикла.

Надеюсь это поможет. С уважением

EDIT Я изменил исходное предложение кода, потому что get_the_excerpt() никогда не бывает пустым (в соответствии с кодомx он возвращает пустую строку с […] в конце), поэтому я использую $post->post_excerpt на месте. Tx Нильсу Янсену за это.

LAST EDIT Ссылаясь на код, the_excerpt () всегда возвращает что-то:

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

На практике: когда вы публикуете новое сообщение, я предполагаю, что всегда есть контент? Зачем нам писать в блоге? Так что это код, который я могу использовать:

 $extrait = get_the_excerpt(); if ($extrait) { echo wp_trim_words($extrait, 20, '...'); } ?> 

ИЗМЕНИТЬ СНОВА Я попытался представить идею о том, что первые три сообщения имеют другую выдержку из остальной части цикла. Мы могли бы использовать смещение тоже.