2012-04-10 45 views
0

我正在处理目录员工列表。我去了一个自定义的解决方案,因为这个目的插件太复杂或太简单,我所寻找的。 所以我创建了这个自定义职位类型“职员”附加了自定义分类法以及它(科学,数学,管理等),所以我有一个查询,我得到了所有列在表中的职位,我的代码如下所示。通过自定义字段第一个字母过滤查询 - Wordpress

<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&nbsp;&nbsp;&nbsp;&nbsp;</th> 
     <th style="width:60px !important;text-align:center;">Website&nbsp;&nbsp;</th> 
     <th style="width:60px !important;text-align:center;">Details&nbsp;&nbsp;</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等插件,但没有一个为我工作。

我很感激任何关于此事的建议/解决方案。

回答

1

我假设你有你正在搜索的初始信息(即你正在生成链接OK,然后通过$_GET或添加query_var来获取传递的值,如this example)。

我也假设你已经检查过它有一个有效的值(例如,是一个单一的字母字符)。

假设值存储在一个名为$initial变量,改变你的查询像

<?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' 
       ) 
      ) 
     ) 
    ); 
?> 

会产生你最需要什么(见the WordPress codex有详细介绍),但遗憾的是它会找到$initial以姓氏的任何地方。如果查询区分大小写,并且只有第一个字符(和$initial)是大写字母,则这可能无关紧要。

如果你有需要,我能想到的三个选项不起作用:

  1. 使用“之间”,而不是“喜欢”,并通过你正在寻找一个不折不扣的价值,后一个(增加ASCII值)例如如果您正在搜索名称'A',请通过'A,B',
  2. 使用上面的查询添加get_meta_sql过滤器,并用“'”替换参数中的''%'。如果您的查询中有任何其他LIKE条件或
  3. 添加posts_where筛选器以自行添加所需的SQL,则可能会产生意想不到的副作用。
+0

嗨Hobo,很好的回答,非常感谢你花时间解释我所有的......可悲的是我必须说我不明白它100%。我不想生成我想在表格上方显示的索引A-Z。你的解释背后的想法是当我按下字母时产生一个新的查询。我没有定义任何东西,因为我诚实地不知道如何处理这个问题。对不起,再次感谢。 – Jaypee 2012-04-11 20:52:15

+0

使用BETWEEN并创建了一个数组,该数组拉动搜索到的字母,然后递增它为下一个值完美工作,以元字段的第一个字母搜索“帖子”。谢谢 – philhoyt 2015-07-02 20:44:14

相关问题