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

12

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

ABC ... XYZ

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

déconcerté

abaque

ormeau

(...) Azur

Au début, je pensais aux types de messages personnalisés, mais la création et le maintien de 26 types de messages personnalisés semblent être une exagération.

Quelle sera la manière la plus efficace de trier les messages comme ça? Requête de base de données, boucle de fractionnement avec PHP? Je vise des milliers de messages (oui, ça doit être Wordpress :)).

Wordpressor
la source

Réponses:

10

N'utilisez pas de types de publication, utilisez des termes de taxonomie!

Lors de l'enregistrement, définissez les termes de l'objet dans une taxonomie AZ, en utilisant la première lettre du titre du message. Assurez-vous de forcer les majuscules ou les minuscules pour la 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 de message, et cela vous donne une taxonomie avec laquelle vous pouvez faire plus de choses, comme des nuages ​​de tags ou des widgets de listeur de termes! C'est également un moyen beaucoup plus rapide de déterminer quelles lettres ont des articles associés et combien, sans forcer la base de données à compter manuellement, et vous pouvez utiliser des API de terme WordPress standard dès le départ pour effectuer des requêtes plus complexes, comme des articles commençant par des voyelles

Tom J Nowell
la source
C'est certainement la route idéale à prendre. Cependant, gardez à l'esprit, avec des milliers de messages; Cela pourrait être une tâche assez lourde. Vous devez d'abord interroger tous les messages commençant par chaque lettre de l'alphabet et mettre à jour chaque message avec le terme de taxonomie approprié, en faisant correspondre la lettre respective de l'alphabet. Sinon, la mise à jour manuelle de chaque publication prendrait des siècles .
Michael Ecklund
Oui, c'est un énorme inconvénient, ces messages seront ajoutés par des gens TOTALEMENT ignorants et je ne peux pas compter sur eux quand il s'agit de définir la bonne taxonomie lors de la création d'un nouveau message. Je ne sais pas si l'interrogation de tous les messages et leur mise à jour à chaque fois que quelqu'un modifie / crée quelque chose sera efficace?
Wordpressor
3
Non, ce ne serait pas un problème du tout, cacher l'interface utilisateur et automatisent le process.do sur ENREGISTRER et crochets post mise à jour, le faire serait manuellement être absurdement cher
Tom J Nowell
Tom J Nowell, cela fonctionne comme un charme, mais j'ai un problème sérieux et je ne sais pas comment gérer cela - certains mots commenceront par des lettres telles que en.wikipedia.org/wiki/Ą - je suis incapable de fixer des conditions pour ceux-ci. Voici du code et des explications: pastebin.com/cHxbjVFH , pourquoi cela se produit-il? J'utilise WP pack dédié à cette langue.
Wordpressor
parlez-vous d'accents et de trémas etc etc? Si c'est le cas, c'est quelque chose qui mérite une toute nouvelle question en soi, et ce n'est pas une question triviale à poser. Il est probable que c'est aussi une question PHP générale et donc Stack Overflow serait le meilleur endroit pour le poser
Tom J Nowell
4

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>
21zna9
la source
pouvez-vous expliquer comment cela fonctionne? ne retournerait-il pas un message contenant la lettre?
Tintinabulator Zea
ce ne serait pas. mysql utilise% comme caractère générique. cependant je n'ai jamais rencontré $ dans les requêtes mysql. correctement, il devrait lireWHERE post_title LIKE 'request%'
brett
1

Consultez cet article ici: query_post par titre?

Ou vous pouvez créer une aide de pré-sauvegarde à l'aide du framework PODS 2 et enregistrer la première lettre du titre du message dans un champ et utiliser une condition WHERE simple.

Ou créez une liste déroulante (un autre pod / type de contenu) avec toutes les lettres et créez une relation avec le type de contenu de vos publications existantes (dans les pods 2, c'est possible) et c'est tout. Ainsi, avant d'enregistrer le terme du dictionnaire, vous sélectionnez dans la liste déroulante la lettre que vous souhaitez attribuer à ce terme.

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

Derfder
la source