Intereting Posts
WordPress выбирает шаблон домашней страницы родительской темы вместо дочерней темы one Как показать содержимое сообщения, прежде чем читать больше тегов (выдержка) для сообщений с защитой паролем? Как отобразить галерею пользовательских сообщений (изображения) через WP_Query получить значение роли пользователя в виде строки из таблицы wp usermeta в пользовательский скрипт Удалить все виджеты с боковой панели Создание структуры папок Перенаправить исходный сбрасывает (qtranslate) язык Отображение количества невидимых комментариев на странице с момента последнего посещения пользователем. Показать сообщения дочерней категории в шаблоне Большая библиотека мультимедиа создание задания wp cron WordPress Queue, как Tumblr? Использование глобальных переменных в плагине Невозможно вручную установить jQuery с помощью Google CDN Как разрешить посетителям фильтровать сообщения по нескольким таксономии

Два расположения столбцов с алфавитным порядком

Я пытаюсь вывести список продавцов в двух столбцах слева направо, отсортированных по алфавиту:

A | В

C | D

E | F

G | ЧАС

В настоящее время нижеприведенный код сортирует пополам по алфавиту, а затем начинает на полпути с остальным алфавитно:

A | С

E | г

B | D

F | ЧАС

Любая идея о том, где я ошибаюсь?

<?php query_posts( array( 'order' => 'ASC' , 'orderby' => 'title' , 'posts_per_page' => -1 , 'post_type' => 'stockist_directory', 'regions' => 'metropolitan' ) ); if (have_posts()) : while(have_posts()) : $i++; if(($i % 2) == 0) : $wp_query->next_post(); else : the_post(); ?> <div id="left-column"> <h1><?php the_title(); ?></h1> <?php the_field('shop_address'); ?><br/> <?php the_field('suburb'); ?>, <?php the_field('postcode'); ?><br/> Phone: <?php the_field('phone_number'); ?><br/> <a href="<?php the_field('website_address'); ?>">Website</a> </div> <?php endif; endwhile; else: ?> <?php endif; ?> <?php $i = 0; rewind_posts(); ?> <?php if (have_posts()) : while(have_posts()) : $i++; if(($i % 2) !== 0) : $wp_query->next_post(); else : the_post(); ?> <div id="right-column"> <h1><?php the_title(); ?></h1> <?php the_field('shop_address'); ?><br/> <?php the_field('suburb'); ?>, <?php the_field('postcode'); ?><br/> Phone: <?php the_field('phone_number'); ?><br/> <a href="<?php the_field('website_address'); ?>">Website</a> </div> <?php endif; endwhile; else: ?> <?php endif; ?> 

Solutions Collecting From Web of "Два расположения столбцов с алфавитным порядком"

Что касается использования query_posts, как сказал @epilektric, никогда не используйте его . WP_Query этого используйте WP_Query .

Еще одно соображение – сохранить код DRY .

Я предлагаю вам следующее:

  1. Запустите цикл один раз и поместите сообщения в вспомогательный массив, используя два ключа один для одного для нечетного.
  2. Циклируйте этот массив и выведите разметку с помощью функции.

Пример:

 function post_data_output( $post ) { the_field('shop_address', $post->ID ); echo get_field('suburb', $post->ID) . ','. get_field('postcode', $post->ID) . '<br/>'; echo 'Phone:' . get_field('phone_number', $post->ID) . '<br/>'; echo '<a href="' . get_field('website_address', $post->ID). '">Website</a>'; } $args = array( 'order' => 'ASC' , 'orderby' => 'title' , 'posts_per_page' => -1 , 'post_type' => 'stockist_directory', 'regions' => 'metropolitan' ); $query = new WP_Query($args); if ($query->have_posts()) : $ordered = array('even' => array(), 'odd' => array()); while($query->have_posts()) : $query->the_post(); global $post; $key = ( $query->current_post % 2 == 0) ? 'even' : 'odd'; $ordered[$key][] = $post; endwhile; wp_reset_postdata(); echo '<div id="left-column">'; if ( ! empty($ordered['odd']) ) { foreach( $ordered['odd'] as $apost ) { post_data_output($apost); } } echo '</div>'; echo '<div id="right-column">'; foreach( $ordered['even'] as $apost ) { post_data_output($apost); } echo '</div>'; endif; 

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

  1. Получить индекс текущего сообщения.
  2. Проверьте результат применения оператора модуля к индексу.
  3. Назначьте соответствующий класс столбца на основе результата модуля.
 <?php if (have_posts()) : ?> <?php while(have_posts()) : the_post(); if ($wp_query->current_post % 2) { $column_class='left-column'; } else { $column_class='right-column'; } ?> <div id="<?php echo $column_class; ?>"> <!-- your content goes here --> <h1><?php the_title(); ?></h1> </div> <?php endwhile; else: ?> <!-- no posts to display --> <?php endif; ?> 

Другие соображения

Вы также должны рассмотреть возможность использования query_posts() . Следующие корректировки должны обеспечивать тот же результат.

Переключите query_posts() для WP_Query .

 $query = new WP_Query( array( 'order' => 'ASC' , 'orderby' => 'title' , 'posts_per_page' => -1 , 'post_type' => 'stockist_directory', 'regions' => 'metropolitan' ) ); 

Затем отрегулируйте Loop для использования $query . Также обратите внимание, что $wp_query->current_post изменилось на $query->current_post .

 <?php if ($query->have_posts()) : ?> <?php while($query->have_posts()) : $query->the_post(); if ($query->current_post % 2) { $column_class='left-column'; } else { $column_class='right-column'; } ?> 

После того, как петля сбросит данные post, как это.

 <?php wp_reset_postdata(); ?>