Sorgunuz ve kolay görüntüleme için Sütunlar oluşturun
Temalarda, şablon etiketlerine ve döngüye iyi uyan bir şeye sahip olmak muhtemelen daha yararlıdır. İlk cevabım bu kadar yoğunlaşmadı. Ayrıca hızlı bir evlat edinme için biraz fazla karmaşık olduğunu düşündüm.
Aklıma gelen daha kolay bir yaklaşım, "döngüyü" sütunlarla genişletmek ve şu ana kadar bu çözüme ulaşmaktı:
Bir WP_Query_Columns nesnesi, herhangi bir standart WP sorgusunu, kolayca yinelenebilen sütunlarla "genişletir". İlk parametre sorgu değişkeni ve ikinci parametre sütun başına görüntülenecek öğe sayısıdır:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<?php foreach(new WP_Query_Columns($the_query, 10) as $column_count) : ?>
<ul>
<?php while ($column_count--) : $the_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endforeach; ?>
Kullanmak için, sadece bu gisteki WP_Query_Columns sınıfını temalar function.php dosyasına ekleyin .
Gelişmiş Kullanım
Şu anda görüntülemekte olduğunuz sütun numarasına ihtiyacınız varsa (örneğin, bazı çift / tek CSS sınıfları için, bunu foreach'ten de alabilirsiniz:
<?php foreach(new WP_Query_Columns($the_query, 10) as $column => $column_count) : ?>
Toplam sütun sayısı da mevcuttur:
<?php
$the_columns = new WP_Query_Columns($the_query, 10);
foreach($the_columns as $column => $column_count) :
?>
<h2>Column <?php echo $column; ?>/<?php echo sizeof($the_columns); ?></h2>
<ul>...
Yirmi On Örnek
Bir test için yirmi on temayı hızlı bir şekilde hackleyebilir ve bu şekilde herhangi bir döngünün üzerine başlık ekleyebilirim. Loop.php dosyasına eklenir, başlangıç temanın kodudur:
<?php /* If there are no posts to display, such as an empty archive page */ ?>
<?php if ( ! have_posts() ) : ?>
<div id="post-0" class="post error404 not-found">
<h1 class="entry-title"><?php _e( 'Not Found', 'twentyten' ); ?></h1>
<div class="entry-content">
<p><?php _e( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'twentyten' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</div><!-- #post-0 -->
<?php endif; ?>
<!-- WP_Query_Columns -->
<?php
### Needs WP_Query_Columns --- see http://wordpress.stackexchange.com/q/9308/178
$query_copy = clone $wp_query; // save to restore later
foreach( new WP_Query_Columns($wp_query, 3) as $columns_index => $column_count ) : ?>
<ul>
<?php
while ( $column_count-- ) : the_post(); ?>
<li><h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2></li>
<?php endwhile; ?>
</ul>
<?php endforeach; ?>
<?php $wp_query = $query_copy;?>
<?php
/* Start the Loop.
...
Daha uzun bir cevap için:
.
Sorunu çözmek için aslında ne kadar ihtiyacınız olduğuna bağlı.
Örneğin, sütun başına öğe sayısı bire eşitse, bu çok basittir:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<ul>
<li>.. </li>
<ul>
<?php endwhile; wp_reset_query(); ?>
</ul>
Bu basit kodla bile, verilecek birden fazla karar olduğu görülebilir:
- Bir sütunda kaç öğe var?
- Toplamda kaç ürün var?
- Başlamak için yeni bir sütun var mı?
- Ve bitecek bir sütun var mı?
Son soru, muhtemelen yalnızca öğeleri değil, aynı zamanda html öğeleri içeren sütunu da eklemek istediğiniz için HTML çıktısı için oldukça ilginçtir.
Neyse ki kodla, tüm bunları değişkenlerde ayarlayabilir ve her zaman ihtiyaçlarımızı hesaplayan kod oluşturabiliriz.
Ve hatta bazen, her soruyu en başından bile cevaplayamayız. Exmaple için, toplam öğe sayısı: Toplamda tamsayı sütun sayısı ile eşleşen, herhangi bir, bazı, çoklu, tam bir sayı var mı?
Jan Fabry'nin cevabı bazı durumlarda bile işe yarayabilir (yukarıdaki örneğim sütun başına bir öğe senaryosu için olduğu gibi), WP_Query tarafından döndürülen herhangi bir sayıda öğe için çalışan bir şeyle ilgilenebilirsiniz.
Matematik için bir ilk:
//
// arithmetical example:
//
# configuration:
$colSize = 20; // number of items in a column
$itemsTotal = 50; // number of items (total)
# calculation:
$count = 0; // a zero-based counter variable
$isStartOfNewColum = 0 === ($count % $colSize); // modulo operation
$isEndOfColumn = ($count && $isStartOfNewColum) || $count === $itemsTotal; // encapsulation
Bu kod çalışmaz, bu yüzden bunu basit bir metin örneğine koyalım
//
// simple-text example:
//
$column = 0; // init a column counter
for($count=0; $count<= $itemsTotal; $count++) {
$isStartOfNewColum = 0 === ($count % $colSize); // modulo
$isEndOfColumn = ($count && $isStartOfNewColum);
$isStartOfNewColum && $column++; // update column counter
if ($isEndOfColumn) {
printf("/End of Column: %d\n", $column-1);
}
if ($isStartOfNewColum) {
printf("<start of Column: %d\n", $column);
}
printf(" * item %d\n", $count);
}
if ($count && !$isEndOfColumn && --$count === $itemsTotal) {
printf("/End of Column: %d\n", $column);
}
printf("Done. Total Number of Columns: %d.\n", $column);
Bu aslında çalışır ve zaten bazı çıktılar yapar:
<start of Column: 1
* item 0
* item 1
* item 2
* item 3
...
* item 17
* item 18
* item 19
/End of Column: 1
<start of Column: 2
* item 20
* item 21
* item 22
...
* item 37
* item 38
* item 39
/End of Column: 2
<start of Column: 3
* item 40
* item 41
* item 42
...
* item 48
* item 49
* item 50
/End of Column: 3
Done. Total Number of Columns: 3.
Bu ne kadar oldukça iyi zaten taklit olabilir bir wordpress şablonunda benziyor:
//
// wordpress example:
//
$count = 0; // init item counter
$column = 0; // init column counter
$colSize = 10; // column size of ten this time
$the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');
$itemsTotal = $the_query->post_count;
?>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<?php
# columns display variables
$isStartOfNewColum = 0 === ($count % $colSize); // modulo
$isEndOfColumn = ($count && $isStartOfNewColum);
$isStartOfNewColum && $column++; // update column counter
if ($isEndOfColumn) {
print('</ul>');
}
if ($isStartOfNewColum) {
printf('<ul class="col-%d">', $column);
}
?>
<li> ... make your day ...
</li>
<?php endwhile; ?>
<?php
if ($count && !$isEndOfColumn && --$count === $itemsTotal) {
print('</ul>');
}
// You don't have to do this in every loop, just once at the end should be enough
wp_reset_query();
?>
(Son örneği bir WP ortamında yürütmedim, ancak en azından sözdizimsel olarak doğru olması gerekir.)