Intereting Posts
Качество масштабирования изображения WordPress Попытка получить свойство ошибки без объекта с эскизом AJAX-login через https на странице http, возможно ли это? Экспорт блога WordPress в вики Можете ли вы иметь отдельные боковые панели для нескольких таксономических архивов? Выходные значения из Customizer не работают Добавление тега привязки к следующему сообщению Загрузка файлов сценариев плагина jQuery и jQuery правильно Устаревшие функции в классе плагинов Перемещенный сайт WordPress на новый сервер, права на каталоги не работают правильно В jquery используйте переменную php для выполнения файла enqueued jquery Как я могу скрыть предыдущую_изобрацию () на первой странице вложения? Является ли wp3.8 / двадцать четырнадцатым Sticky Nav & Responsive – основным или основанным на теме Общее количество сообщений в выбранных категориях? Добавить таблицы стилей и js в файлы шаблонов при использовании короткого кода

Как показать статический placeholder, когда меньше элементов сообщения на странице архива?

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

Если есть 12 эскизов, покажите их всем.

Если это меньше этого максимума, заполните оставшееся количество заполнителя, чтобы вы получили результат до 12.

Вот мой первый проект:

<?php $count = 1; query_posts( 'posts_per_page=12&order=ASC' ); if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="archive-post-single"> <?php if ( has_post_thumbnail() ) { ?> <a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail(); ?></a> <?php } ?> </div> <?php $count++; endwhile; endif; ?> <?php if ($count < 12) { ?> <div class="archive-post-single"> <img src="<?php bloginfo('template_directory'); ?>/images/thumb.png" alt="" /> </div> <?php } ?> </div> <?php wp_reset_query(); ?> 

В PHP существует два типа циклов:

  • С неизвестным количеством элементов (while (), foreach (), do () while и т. Д.),
  • С определенным количеством элементов (для ())

Вам нужен цикл с определенным количеством элементов (в данном случае 12 элементов). Таким образом, цикл while – это не то, что вам нужно. Сначала взгляните на цикл, который обычно используется в WordPress

 $posts = new WP_Query( 'numberposts=12' ); echo '<ol>'; while( $posts->have_posts() ) { $posts->the_post(); $title = get_the_title(); echo '<li>' . $title . '</li>'; } echo '</ol>'; 

Этот цикл отображает сообщения, пока есть какие-либо сообщения. Если есть только пять сообщений, будет отображаться только пять сообщений.

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

 echo '<ol>'; for( $number = 0; $number < 12; $number++ ) { // create list element } echo '</ol>'; 

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

 echo '<ol>'; for( $number = 0; $number < 12; $number++ ) { if( $number < $post_count ) { // display post } else { //display placeholder } echo '</ol>'; 

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

Теперь нам просто нужно количество сообщений. Это спокойно: $post_count = $posts->post_count;

 $posts = new WP_Query( 'numberposts=12' ); $post_count = $posts->post_count; echo '<ol>'; for( $number = 0; $number < 12; $number++ ) { if( $number < $post_count ) { // display the post $posts->the_post(); $title = get_the_title(); echo '<li>' . $title . '</li>'; } else { //display the placeholder echo '<li>No more posts</li>'; } } echo '</ol>'; 

Надеюсь, это поможет и прояснит разницу между циклом while и for-loop.

Надеюсь, это должно сделать трюк. Если вы добавите meta_key => _thumbnail_id в свой запрос, он будет запрашивать сообщения с отличным изображением. Следовательно, вы также можете удалить has_post_thumbnail() .

 $count = 0; query_posts( array( 'posts_per_page' => 12, 'order' => 'ASC', 'meta_key' => '_thumbnail_id' ) ); if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="archive-post-single"> <a href="<?php echo get_permalink(); ?>"><?php the_post_thumbnail(); ?></a> </div><?php $count++; endwhile; endif; wp_reset_query(); if ( $count < 12 ) { for ($i = $count; $i <= 12; $i++) { ?> <div class="archive-post-single"> <img src="<?php echo get_stylesheet_directory_uri(); ?>/images/thumb.png" alt="" /> </div><?php } } 

Плагин для спасения

Я написал плагин для точного этого случая. Он просто называется « WP default img» и может быть схвачен в GitHub.

Применение

Это просто: добавьте размер изображения. Эхо заполнителя. Готово.

 // functions.php during init: add_image_size( 'default_img', 80, 80, true ); echo wp_default_img( array( 'url' => get_site_url( null, 'your_path' ).'/some_img.jpg' ,'size' => 'default_img' ) ); 

Он также имеет два фильтра:

  • wp_default_img_attr // Атрибуты по умолчанию (высота / ширина / alt / и т. д.)
  • wp_default_img // Выход / результат

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

Основная функция

Я также добавил билет Trac, чтобы получить эту функцию в ядре, поскольку я вижу, что многие люди нуждаются в ней.

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