PHP / SQL / Wordpress alfabeye göre Grup, kullanıcı listesi

2 Cevap php

Bu gibi alfabetik kategorize kullanıcıları ile (oldukça büyük) Wordpress kullanıcı dizin oluşturmak istiyorsanız:

A

  • Amy
  • Adem

B

  • Bernard
  • Bianca

ve benzerleri.

Ben bir sorun haricinde, bunun için çalışıyor özel Wordpress sorgu yarattık: Bu da "boş" harfleri, isim, o harf ile başlayan herhangi bir kullanıcı değildir harfleri gösterir. Eğer o mektubu bir adla bir kullanıcı aslında var olmadığını sadece mektup görüntüler böylece bana bu kodu düzeltmek yardımcı olabilir, ben, ben o mektubu için orada kaç sonuçları kontrol ederek şansımı denedim :) memnun olurdum ama bir şekilde bu işe yaramıyor.

(Bilginize, ben kullanıcı fotoğraf eklenti kullanmak ve sadece onaylı bir resim var listede kullanıcıları, SQL sorgusunda dolayısıyla şeyler göstermek istiyorum).

<?php
    $alphabet = range('A', 'Z');
    foreach ($alphabet as $letter) {
      $user_count = $wpdb->get_results("SELECT COUNT(*) FROM wp_users WHERE display_name LIKE '".$letter."%' ORDER BY display_name ASC");
      if ($user_count > 0) {
        $user_row = $wpdb->get_results("SELECT wp_users.user_login, wp_users.display_name 
        FROM wp_users, wp_usermeta
        WHERE wp_users.display_name LIKE '".$letter."%' 
        AND wp_usermeta.meta_key = 'userphoto_approvalstatus'
        AND wp_usermeta.meta_value = '2'
        AND wp_usermeta.user_id = wp_users.ID
        ORDER BY wp_users.display_name ASC");
        echo '<li class="letter">'.$letter.'';
        echo '<ul>';
        foreach ($user_row as $user) { 
          echo '<li><a href="/author/'.$user->user_login.'">'.$user->display_name.'</a></li>';
        }
      echo '</ul></li>';
      }                     
    }
    ?>

Şimdiden teşekkürler!


Update:

Ben bu içine SQL düzenlenebilir, ama şimdi ben ilk li önce bir </ul> dışarı tükürür sorun var, hangi kadar vida düzeni, bu gibi:

</ul>
</li>
<li class="letter">
    <div class="letter_head">A</div>
  <ul>
    <li>Abigail</li>
  </ul>
</li>

<li class="letter">
<div class="letter_head">B</div>
<ul>
  <li>Bernard</li>      
  <li>Bianca</li>       
</li>
</ul>

Bu genel ul ve li yuvalama hakkında oldukça bitkin bulunuyor. Bunu nasıl düzeltebilirim?

            <?php 
    $qry = "SELECT DISTINCT wp_users.user_login, wp_users.display_name, 
            LEFT(UPPER(wp_users.display_name), 1) AS first_char 
            FROM wp_users, wp_usermeta
            WHERE UPPER(wp_users.display_name) BETWEEN 'A' AND 'Z'
            OR wp_users.display_name BETWEEN '0' AND '9'  
            AND wp_usermeta.meta_key = 'userphoto_approvalstatus'
            AND wp_usermeta.meta_value = '2'
            AND wp_usermeta.user_id = wp_users.ID
            ORDER BY wp_users.display_name ASC";
            $result = mysql_query($qry);
            $current_char = '';
            while ($row = mysql_fetch_assoc($result)) {
                if (!isset($current_char)) {
                        echo '<li class="letter"><div class="letter_head">'.$current_char.'</div>';
                        echo '<ul>';
                } elseif ($row['first_char'] != $current_char) {
                        echo '</ul>';
                        $current_char = $row['first_char'];
                        echo '<li class="letter"><div class="letter_head">'.$current_char.'</div>';
                        echo '<ul>';
                }
                echo '<li><a href="/member/'.$row['user_login'].'">'.$row['display_name'].'</a></li>';
            }  
    ?>

2 Cevap

Ilk harfi son kaydın farklıdır eğer daha iyi bir çözüm alfabetik sırayla ve her kaydı kontrol etmek için tüm kullanıcılar döngü olacaktır. Farklı ise, yeni bir mektup echo.

Sen 52 veritabanı çağrıları yapıyoruz. Kullanıcı tablo bir sorgu hepsini kapmak için çok büyük? Ayrıca, ben deyince tarafından sipariş gereksiz olduğuna inanıyorum. MySQL bunu yok sayar ya da değil bilmiyorum.

Senin sorunun bir tek eleman Array sayısı sorgu için her zaman döndürür get_results olduğunu. Yani> 0 $ USER_COUNT her zaman doğru dönüyor. (PHP mantık çoğu zaman anlamıyorum. Sıfırdan büyük bir dizi var mı?). [0] gerçek sayıya ulaşmak için $ USER_COUNT gibi bir şey yapmak gerekiyor.