web-dev-qa-db-ja.com

カスタムフィールドの値でアルファベット順に投稿を並べ替え、異なる文字の間に区切り文字を挿入する

私は私のカスタム投稿タイプ "person"の投稿をすべてカスタムフィールドlast_nameでアルファベット順に並べたページをリストしています。

文字範囲が始まる前にどのように区切り文字(文字の画像など)を挿入するのですか?

これが私がやろうとしていることです:

alphabetical list with dividers

更新:
これが私が使っているコードです:

<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>
3
Christoph

これを試して:

<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)。

5

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のワードプレスループがあります。私はそれがサーバーにどれほど緊張しているのかわからないが、それはうまくいくはずです。それが私が最初に考えたことです。それがどうやって行くのか知っている!

0
trusktr