web-dev-qa-db-fra.com

Afficher tous les articles commençant par une lettre donnée?

J'essaie de construire un dictionnaire basé sur Wordpress, il aura fondamentalement 26 pages (une pour chaque lettre):

A B C ... X Y Z

Et chaque page affichera tous les articles commençant par une lettre donnée. Ainsi, après avoir ouvert la page "A", il devrait afficher quelque chose comme:

déconcertant

abaque

ormeau

(...) Azur

Au début, je pensais aux types de publications personnalisées, mais créer et gérer 26 types de publications personnalisées ressemblait à une overkill.

Quel sera le moyen le plus efficace de trier les articles de cette manière? Requête de base de données, boucle de fractionnement avec PHP? Je vise des milliers de messages (oui, ce doit être Wordpress :)).

11
Wordpressor

N'utilisez pas de type de message, utilisez des termes de taxonomie!

Lors de la sauvegarde, définissez les termes de l'objet dans une taxonomie AZ en utilisant la première lettre du titre de l'article. Assurez-vous de forcer la majuscule ou la minuscule pour plus de cohérence. Assurez-vous de créer des termes pour chaque lettre de l'alphabet et un terme pour les chiffres et autres symboles non alphanumériques.

Cela devrait être plus rapide que d'interroger la première lettre de chaque titre d'article, et cela vous donne une taxonomie avec laquelle vous pouvez faire plus de choses, comme des nuages ​​de balises ou des widgets listeur de termes! C'est également un moyen beaucoup plus rapide de déterminer quelles lettres ont des publications associées et combien, sans forcer la base de données à compter manuellement, et vous pouvez utiliser des API de terme WordPress standard prêtes à l'emploi pour effectuer des requêtes plus complexes, comme des publications commençant par des voyelles.

8
Tom J Nowell

Si vous ne souhaitez pas utiliser la méthode des termes de taxonomie préférés, procédez comme suit:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // could be any letter you want
         $results = $wpdb->get_results(
                "
                SELECT * FROM $wpdb->posts
                WHERE post_title LIKE '$request%'
                AND post_type = 'post'
                AND post_status = 'publish'; 
                "
         ); 
         if ( $results ) 
         {
            foreach ( $results as $post ) 
            {
                setup_postdata ( $post ); 
                ?> 
                <li>
                    ... loop stuff here (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">No clubs found for that letter. Please try again, or use the search at the top.</div>
            <?php
         }
         ?>
    </ul>
4
21zna9

Consultez cet article ici: query_post par titre?

Vous pouvez également créer une aide de pré-enregistrement à l'aide de PODS 2 Framework , enregistrer la première lettre du titre de l'article dans un champ et utiliser la simple condition WHERE.

Ou créez un menu déroulant (un autre pod/type de contenu) avec toutes les lettres et créez une relation avec votre type de contenu de messages existant (dans les pods 2, c'est possible) et c'est tout. Par conséquent, avant d’enregistrer le terme du dictionnaire, sélectionnez dans la liste déroulante la lettre que vous souhaitez attribuer à ce terme.

Dans les pods 2, vous pouvez ajouter le champ supplémentaire à un type de contenu de publications existant. Ce plugin/framework qui ressemble à CCK + Views dans le monde Drupal est vraiment génial.

Pods 2 est un plugin très utile.

1
Derfder