我正在处理目录员工列表。我去了一个自定义解决方案,因为用于此目的的插件太复杂或太简单,无法满足我的需求。 所以我创建了这个自定义帖子类型“staff”,附带了自定义分类法(科学,数学,管理等),所以我有一个查询,我在表格中列出了所有这些帖子,我的代码如下所示。 / p>
<table class="directorytable">
<thead>
<th class="first-th">Portrait</th>
<th>Name</th>
<th>Position</th>
<th>Phone</th>
<th style="width:60px !important;text-align:center;">Email </th>
<th style="width:60px !important;text-align:center;">Website </th>
<th style="width:60px !important;text-align:center;">Details </th>
</thead>
<?php query_posts(array('post_type'=>'staff','orderby'=>'meta_value','meta_key'=>'staff_last_name','order'=>'asc'))?>
<?php while(have_posts()): the_post();?>
<tr>
<td class="first-td"><a rel="lightbox" href="<?php the_permalink(); ?>"/><img src="<?php the_field('staff_portrait');?>" style="border-radius:2px; width:35px;"/></a></td>
<td><a rel="lightbox[1]" href="<?php the_permalink();?>"><?php the_field('staff_name');?> <?php the_field('staff_last_name');?></a> </td>
<td><?php the_field('staff_position'); ?></td>
<td><?php the_field('staff_phone');?> | <strong>Ext: </strong><?php the_field('staff_extension')?></td>
<td style="width:60px; text-align:center;"><a href="mailto:<?php the_field('staff_email');?>"><img src="/images/directory/mail.png"/></a></td>
<td style="width:60px; text-align:center;"><?php if(get_post_meta($post->ID,'staff_website', true)){?><a target="_blank" href="<?php the_field('staff_website');?>"><img src="/images/directory/document-globe.png"/></a><?php } else {?><?php echo '';?><?php } ?></td>
<td style="width:60px; text-align:center;"><a rel="lightbox[2]" href="<?php the_permalink();?>"><img src="/images/directory/magnifier-zoom.png"/></a></td>
</tr>
<?php endwhile; ?>
</table>
所以这个列表运行得非常好,但我的客户端要求我添加一个字母索引。所以我需要在结果之前列出一个范围a-z,然后点击,只显示他们的“staff_last_name”自定义字段(我使用ACF)以所选字母开头的帖子。
我尝试过一些像AZIndex,WP-Snap等插件,但这些插件都不适用于我。
我对此事的任何建议/解决方案表示感谢。
答案 0 :(得分:1)
我假设您有初始搜索(即您正在生成链接,然后检索传递的值,例如通过$_GET
或添加query_var
,如$initial
3}})。
我还假设你已经检查过它有一个有效值(例如是一个单字母字符)。
假设该值存储在名为<?php query_posts (
array(
'post_type'=> 'staff',
'orderby' => 'meta_value',
'meta_key' => 'staff_last_name',
'order' => 'asc',
'meta_query' => array(
array(
'key' => 'staff_last_name',
'value' => $initial,
'compare' => 'LIKE'
)
)
)
);
?>
的变量中,请将查询更改为
$initial
将生成您需要的大部分内容(有关详细信息,请参阅this example),但不幸的是,它会在姓氏中的任何位置找到$initial
。如果查询区分大小写,并且只有第一个字符(和get_meta_sql
)是大写的,则可能无关紧要。
如果它不能按你的需要工作,我可以考虑三个选项:
posts_where
过滤器,并将参数中的“'%”替换为“'”。如果您的查询中有任何其他LIKE条件,或