私は私のカスタム投稿タイプ "person"の投稿をすべてカスタムフィールドlast_name
でアルファベット順に並べたページをリストしています。
文字範囲が始まる前にどのように区切り文字(文字の画像など)を挿入するのですか?
これが私がやろうとしていることです:
更新:
これが私が使っているコードです:
<ul class="list-ensemble">
<?php query_posts('post_type=person&post_status=publish&meta_key=last_name&orderby=meta_value&order=ASC');
if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<li data-id="<?php the_ID(); ?>">
<a href="<?php the_permalink(); ?>" class="ensemble-single-link">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(thumbnail); } ?>
</a>
</li>
<?php endwhile; // end of the loop. ?>
</ul>
これを試して:
<ul class="list-ensemble">
<?php query_posts('post_type=person&post_status=publish&meta_key=last_name&orderby=meta_value&order=ASC');
$current_letter = '';
if ( have_posts() ) while ( have_posts() ) : the_post();
$last_name = get_post_meta( $post->ID, 'last_name', true );
$letter = strtolower( substr( $last_name, 0, 1 ) );
if ( $letter != $current_letter ) {
$current_letter = $letter; ?>
<li class="letter">
<img src="<?php echo $letter; ?>.jpg" alt="<?php echo $letter; ?>" title="<?php echo $letter; ?>">
</li>
<?php } ?>
<li data-id="<?php the_ID(); ?>">
<a href="<?php the_permalink(); ?>" class="ensemble-single-link">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'thumbnail' ); } ?>
</a>
</li>
<?php endwhile; // end of the loop. ?>
</ul>
ループ内の各投稿について、last_name
postmetaフィールドを検索し(WordPressがpostmetaをキャッシュするため、これはページにクエリを追加しません)、それからその最初の文字をチェックします。もしそれが新しい文字ならば、それはその文字にちなんで名付けられた画像を持つリスト要素を出力します(例えばf.jpg
)。
Wordpressのソート機能にはそのような機能は含まれていないので、おそらくMatt Mullenweg ... haha ...に尋ねるべきです。
いいえ、しかし実際には、各文字に対してquery_posts()を使用することができます(つまり、各文字につき1回、最大26回ループを呼び出します。その文字にマッチする投稿がない場合は、その文字を飛ばしてください。
あなたは現在1つのループしかありません。あなたはfor()ループを書かなければならないかもしれません、それは順番に各wordpressループを生成します。
このようなもの(単なるラフドラフト):
<ul class="list-ensemble">
<? for ($i=65; $i<91; $i++) : // 65 through 90 represent the uppercase alphabet
query_posts('post_type=person&post_status=publish&meta_key=last_name&orderby=meta_value&order=ASC');
//PUT SOME CODE HERE TO CHECK IF THE FIRST LETTER IS EQUAL TO $i
//Set some variable $letter_matches == true if the letter matches.
?>
<h3 class="letter">
<?php //ECHO THE LETTER CORRESPONDING TO $i HERE ?>
</h3>
<?
if ( have_posts() and $letter_matches ) while ( have_posts() ) : the_post(); ?>
<li data-id="<?php the_ID(); ?>">
<a href="<?php the_permalink(); ?>" class="ensemble-single-link">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(thumbnail); } ?>
</a>
</li>
<?php endwhile; // end of the loop. ?>
<?endfor; ?>
</ul>
そのため、基本的にページには最大26のワードプレスループがあります。私はそれがサーバーにどれほど緊張しているのかわからないが、それはうまくいくはずです。それが私が最初に考えたことです。それがどうやって行くのか知っている!