0

ディレクトリスタッフのリストに取り組んでいます。この目的のためのプラグインは、私が探していたものに対して複雑すぎるか単純すぎるため、カスタムソリューションに行きました. そこで、このカスタム投稿タイプ「staff」を作成し、カスタム分類法 (科学、数学、管理など) も添付して、テーブルにリストされたすべての投稿を取得するクエリを作成しました。私のコードは次のようになります。

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

このリストは非常にうまく機能していますが、クライアントからアルファベット インデックスの追加を依頼されました。したがって、結果の前にリストされた範囲 az が必要になり、クリックすると、「staff_last_name」カスタム フィールド (ACF を使用しています) が選択した文字で始まる投稿のみが表示されます。

AZIndex、WP-Snap などのプラグインを試してみましたが、どれもうまくいきませんでした。

この件に関する推奨事項/解決策をいただければ幸いです。

4

1 に答える 1

1

私はあなたが探しているイニシャルを持っていると仮定します (つまり、リンクを正常に生成してから、この例$_GETのように a を介して、または a を追加して、渡された値を取得しています)。query_var

また、有効な値 (単一の英字など) であることを確認済みであると仮定します。

値が という変数に格納されていると仮定すると、$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'
                )
            )
        )
    );
?>

必要なもののほとんどを生成します (詳細については、WordPress コーデックスを参照してください) $initial。クエリの大文字と小文字が区別され、最初の文字 (および$initial) のみが大文字である場合は問題にならない場合があります。

必要に応じて機能しない場合は、次の 3 つのオプションが考えられます。

  1. 「LIKE」の代わりに「BETWEEN」を使用し、検索している文字の値とその後ろの値 (ASCII 値で増分) を渡します。たとえば、「A」で始まる名前を検索している場合は、「A,B」を渡します。 '、
  2. 上記のクエリでフィルタを追加get_meta_sqlし、引数の「'%」を「'」に置き換えます。クエリに他の LIKE 条件がある場合、予期しない副作用が発生する可能性があります。
  3. posts_whereフィルターを追加して、必要な SQL を自分で追加します。
于 2012-04-11T11:27:27.300 に答える