按自定义字段值的字母顺序对帖子进行排序,在不同字母之间插入分隔符

时间:2011-02-26 作者:Christoph

我正在按自定义字段的字母顺序列出我的自定义帖子类型“person”的所有帖子last_name 在页面上。

How would i insert a divider (e.g. an image of the letter) before a letter range starts?

以下是我想做的:

alphabetical list with dividers

Update:
下面是我使用的代码:

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

2 个回复
最合适的回答,由SO网友:Simon Blackbourn 整理而成

试试这个:

<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>
对于循环中的每个post,它检索last_name Posteta字段(这不会向页面添加任何查询,因为WordPress会缓存Posteta),然后检查它的第一个字母。如果是一个新字母,它将输出一个列表元素,其中包含一个以字母命名的图像(例如。f.jpg).

SO网友:trusktr

既然Wordpress的排序功能不包括这种功能,你可能应该问问MattMullenweg。。。哈哈。。。

不,但实际上,您可能可以对每个字母使用query\\u posts()(换句话说,最多调用26次循环,每个字母一次。然后,对于每个循环,让包含一些代码,以检查post meta\\u值的第一个字母是否与相应的字母匹配。如果没有与该字母匹配的帖子,那么让跳过该字母即可。

您当前只有一个循环。您可能需要编写一个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个wordpress循环。我不确定这对服务器有多大的压力,但它应该可以工作。这是我想到的第一件事。让我知道怎么回事!

结束

相关推荐

Sort admin menu items

关于“的相关注释”Changing the Order of Admin Menu Sections?“,我正在寻找一种按字母顺序对WordPress管理区域的每个子部分中的条目进行排序的方法。目前,每当添加新插件时,其条目都会出现在“设置/工具/插件”下看似随机的位置,通常很难找到新的菜单项。(我已经有很多插件了,所以我的菜单很满。)由于我相当经常地添加和删除插件,所以我宁愿不需要不断进入设置页面来获取菜单排序插件并调整顺序。抱歉问了这么长的问题;我只是想弄清楚我在找什么。示例代替: S